我正在爲我的高流量網站優化一個mysql表,我有一個關於mysql索引的問題。首先一些信息:MySQL索引最佳性能
該表有273382行。
查詢是:
SELECT table1.field1, table1.field2, table2.field2
FROM table1
LEFT JOIN table2 ON table1.idfield = table2.idfield
WHERE table1.field = 1 AND table1.field2 = 'yes'
ORDER BY table1.id DESC
LIMIT 0,25
我有以下指標:
index for table1.id - primary unique index
index for table1.idfield - index
index for table2.idfield - index
index for (table1.field,table1.field2) - index
通過上述指標的查詢需要1.5至2.5秒即可完成
EXPLAIN EXTENDED說,正在使用主鍵(table1.id),我試過unique/index(table1.field,table1.field2,table1.id),結果類似(即使它使用了這個索引)。
在索引更改過程中(大約需要1分鐘),查詢變得快得多0.009。一旦更改過程完成,查詢就會回到1.5-2.5s(大部分低於2)的速度。
我的問題是:哪個索引對這個查詢最有效,以及爲什麼查詢在更改索引時速度更快。
一般經驗法則:在決策環境中使用的任何字段('where,'join,等等)都應該有一個索引。並注意只是有一個索引並不意味着它會隨時使用。 mysql可能會決定全表掃描比使用索引更有效。 –
我意識到了這一點,並且我在連接和字段的位置都有索引,但查詢仍然很慢。但是在更改過程中,查詢運行速度要快得多,爲什麼?我怎樣才能使這個查詢運行速度與它被修改時一樣快。 –
嘗試將table1.field和table1.field2列添加到索引中。它可能有助於您的表現。 – reza