簡體   English   中英

通過列和WHERE子句條件的順序同步進行MySQL查詢優化

[英]MySQL Query optimization thru order synchronization of columns and WHERE clause conditions

假設我有四個表的聯接,表1通過外鍵關系引用了其他3個表(表2、3、4):

SELECT a.column_a, b.column_b, c.column_c, d.column_d
FROM Table1 a, Table2 b, Table3 c, Table4 d
WHERE a.col1_fk=d.col_id
AND a.col2_fk=c.col_id
AND a.col3_fk=b.col_id

為了對上述語句進行最佳優化,連接條件的順序應與SELECT語句的列的順序相同嗎? 因此,我上面的示例是否經過了最優化? 還是所說的順序不重要?

沒關系 查詢優化器決定先讀取哪個表。
當您的數據大小增加時,這也可能會改變。 例如,有一天,您的WHERE子句過濾了一張表的90%,因此MySQL決定首先讀取該表。 一千個INSERT之后,相同的WHERE子句可能只過濾1%。 然后,MySQL可能決定最后讀取它,甚至進行全表掃描。

不用擔心這種優化。 如果要進行優化,請閱讀有關EXPLAIN (除了if和使用了哪些索引之外,它還顯示了表的讀取順序),並學習了如何正確使用索引

而且,沒有冒犯,您真正應該學習的是1992年ANSI SQL標准引入的正確連接語法。 以下是一些示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM