MySQL首先執行什麼操作:WHERE
子句或ORDER BY
子句?MySQL首先執行什麼操作:WHERE子句或ORDER BY子句?
我之所以問是確定我是否應該添加一個索引來給定列。
我有一個表,如下所示:
| Column | Type | Index |
|-----------|-------------|-------|
| id | INT (pk) | Yes |
| listorder | INT | ?? |
| data | VARCHAR(16) | No |
| fk | INT (fk) | Yes |
我會經常執行查詢,如SELECT id, data FROM mytable WHERE fk=12345 ORDER BY listorder ASC
。對於我的數據集,它只會導致少量的記錄(〜5)對於一個給定fk
,但是,也有在表中多條記錄與許多fk
值,和許多重複listorder
值跨越許多fk
值。
如果先進行WHERE
條款,那麼我期待我不應該添加索引到listorder
,因爲它會導致UPDATE
性能下降,而不用於SELECT
顯著改善。
什麼戈登Linoff sais。另外,在評估索引時,絕對不要提出抽象問題,但總是在** actual **查詢中使用** actual **數據(或合理的數據集合)運行'EXPLAIN',因爲不同的數據集可能觸發不同的索引。 – watery
@watery我目前沒有任何數據,但試圖解釋什麼數據將盡可能最好。 – user1032531
Yuk,據我所知,但這就是爲什麼我說「或一組合理的數據可能是什麼」,因爲真實的數據可能會改變索引的使用/選擇(即當處理同一張表上的多個索引時)。您可能無法確定您創建的索引是否會按照您的預期使用。你可以發現你的DBMS根本沒有使用索引。索引的使用甚至可能隨着數據集的變化而改變,這就是我爲什麼這麼說的原因。 – watery