我有一個表1和表2MySQL的性能,內聯接,如何避免使用臨時和文件排序
表1 PARTNUM - ID_BRAND partnum是主鍵 id_brand爲「索引」
表2 ID_BRAND - BRAND_NAME id_brand是主鍵 BRAND_NAME爲 「索引」
表1包含百萬的記錄和表2含有1.000記錄。
我試圖優化一些查詢使用EXPLAIN和經過很多嘗試後,我已經到了死衚衕。
EXPLAIN
SELECT pm.partnum, pb.brand_name
FROM products_main AS pm
LEFT JOIN products_brands AS pb ON pm.id_brand=pb.id_brand
ORDER BY pb.brand ASC
LIMIT 0, 10
查詢返回該執行計劃:
ID, SELECT_TYPE, TABLE, TYPE, POSSIBLE_KEYS, KEY, KEY_LEN , REF, ROWS, EXTRA
1, SIMPLE, pm, range, PRIMARY, PRIMARY, 1, , 1000000, Using where; Using temporary; Using filesort
1, SIMPLE, pb, ref, PRIMARY, PRIMARY, 4, demo.pm.id_pbrand, 1,
MySQL查詢優化器顯示在執行計劃中暫時+文件排序。 我怎樣才能避免這種情況?
「EVIL」位於ORDER BY pb.brand ASC。通過該外部訂單排序似乎是瓶頸..
你在這張表裏有什麼指標? – eillarra 2010-07-26 13:31:27
根據猜測,除非您有pb.brand上的索引,否則mysql將需要在應用限制之前對所有1M行進行排序 – StuartLC 2010-07-26 13:44:50
表1:PARTNUM是PK並且ID_BRAND是加速的索引 表2:ID_BRAND是PK和BRAND是加速的指標 – Vincenzo 2010-07-26 13:53:25