Ticket #2325 (new 改善提案) — at Version 7

Opened 11 years ago

Last modified 9 years ago

dtb_products_class の INDEX 追加

Reported by: nanasess Owned by: somebody
Priority: Milestone: EC-CUBE2.13.x
Component: その他 Version: 2.12.5
Keywords: Cc:
修正済み: yes

Description (last modified by Seasoft) (diff)

商品一覧を表示する際、 dtb_products_class にあるカラムの MAX, MIN を取得している。

                    JOIN (
                        SELECT product_id,
                            MIN(product_code) AS product_code_min,
                            MAX(product_code) AS product_code_max,
                            MIN(price01) AS price01_min,
                            MAX(price01) AS price01_max,
                            MIN(price02) AS price02_min,
                            MAX(price02) AS price02_max,
                            MIN(stock) AS stock_min,
                            MAX(stock) AS stock_max,
                            MIN(stock_unlimited) AS stock_unlimited_min,
                            MAX(stock_unlimited) AS stock_unlimited_max,
                            MAX(point_rate) AS point_rate,
                            MAX(deliv_fee) AS deliv_fee,
                            COUNT(*) as class_count
                        FROM dtb_products_class
                        WHERE del_flg = 0 
                        GROUP BY product_id
                    ) AS T4

MAX() 及び、 MIN() で参照するカラムに INDEX を付与することで高速化が期待できる。

(INDEX が無いと、全件走査して最大値、最小値を求めるが、INDEX があれば、INDEX の最大値、最小値を参照するのみなので、非常に高速)

CREATE INDEX dtb_products_class_price01_idx ON dtb_products_class (price01);
CREATE INDEX dtb_products_class_price02_idx ON dtb_products_class (price02);
CREATE INDEX dtb_products_class_stock_idx ON dtb_products_class (stock);
CREATE INDEX dtb_products_class_stock_unlimited_idx ON dtb_products_class (stock_unlimited);
CREATE INDEX dtb_products_class_point_rate_idx ON dtb_products_class (point_rate);
CREATE INDEX dtb_products_class_deliv_fee_idx ON dtb_products_class (deliv_fee);
CREATE INDEX dtb_products_class_product_id_idx ON dtb_products_class (product_id);

関連チケット

  • #2644 (SC_DB_DBFactory::alldtlSQL から class_count を削除)

Change History

comment:1 Changed 11 years ago by nanasess

大量の INDEX を張ると、ボトルネックになる場合もあるため注意が必要

comment:2 Changed 11 years ago by h_yoshimoto

  • Milestone changed from EC-CUBE2.13.0 to EC-CUBE 2.13.1

comment:3 Changed 10 years ago by m_uehara

  • Milestone changed from EC-CUBE 2.13.1 to EC-CUBE 2.13.2

comment:4 Changed 10 years ago by h_yoshimoto

  • Milestone changed from EC-CUBE2.13.2 to EC-CUBE2.13.3

comment:5 Changed 10 years ago by kim

  • Milestone changed from EC-CUBE2.13.3 to EC-CUBE2.13.4

nanasess様 今回は、2.13.4に回させていただきますが、 Indexのみのため、マイナーの範囲とさせていただき実装のご検討をお願いいたします。

comment:6 Changed 10 years ago by Seasoft

説明に記載のインデックスとクエリーの組み合わせでは、噛み合っていない気がします。

パフォーマンス改善はの状況は検証済みでしょうか?

comment:7 Changed 10 years ago by Seasoft

  • Description modified (diff)
Note: See TracTickets for help on using tickets.