我有一個查詢阻止了我使用此應用程序,因爲它可能需要7秒才能完成,因爲它沒有被緩存。如何讓這個MySQL查詢執行得更好?
SELECT attribute1
FROM `product_applications`
WHERE `product_applications`.`brand_id` IN (.. like 500 ids...)
GROUP BY attribute1
我有brand_id索引。我曾經這樣做了一個SELECT DISTINCT,但選擇了GROUP BY並且性能略有提高。
本表使用的是InnoDB,擁有約230萬行。我已經運行了一個EXPLAIN,它使用索引,它只是需要永遠。
我知道有很多變量來獲得像這樣的表演。該數據庫位於Amazon EC2實例上。
是否有某種表分割我可以做,以獲得更好的查詢執行?我非常感謝任何人可以提供的幫助。
編輯:
這裏是我的解釋,從對NewRelic的結果:
Id 1
Select Type SIMPLE
Table product_applications
Type range
Possible Keys brand_search_index_1,brand_search_index_2,brand_search_index_3,brand_search_index_4,brand_sarch_index_5
Key brand_search_index_1
Key Length 5
Ref
Rows 843471
Extra Using where; Using index; Using temporary; Using filesort
看到,它的使用索引。但它也使用臨時表和文件夾。我怎麼能克服那些東西?
編輯:
自從我開了這個問題的時候,我改變了發動機在該表上從InnoDB的在MyISAM。我還通過將屬性5到60移動到另一個表來垂直分區。但是這個選擇語句仍然在2到3秒之間!!!!這個查詢的糟糕表現令人生氣。
最終結果集中有多少行? – 2011-02-11 20:47:49
請寄出`SHOW CREATE TABLE product_applications`的輸出。 – 2011-02-11 20:48:24
上面的查詢返回56行。 – AKWF 2011-02-12 02:33:03