Ticket #2325 (new 改善提案) — at Version 7
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:2 Changed 12 years ago by h_yoshimoto
- Milestone changed from EC-CUBE2.13.0 to EC-CUBE 2.13.1
comment:5 Changed 11 years ago by kim
- Milestone changed from EC-CUBE2.13.3 to EC-CUBE2.13.4
nanasess様 今回は、2.13.4に回させていただきますが、 Indexのみのため、マイナーの範囲とさせていただき実装のご検討をお願いいたします。
Note: See
TracTickets for help on using
tickets.

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