2009-10-07 23 views
2

假設我想根據多個WHERE子句查詢一個表。布爾語句的順序是否會在MySQL查詢中產生性能差異?

這些語句中的任何一個都比另一個快嗎?

SELECT * 
    FROM table 
    WHERE (line_type='section_intro' OR line_type='question') 
    AND (line_order BETWEEN 0 AND 12) 
ORDER BY line_order"; 

...或:

​​

我猜它會回落到是第一位是否會選擇超過12分的記錄,然後從那裏大肆削減。

回答

2

不,訂單無關緊要。查詢優化器將分別估計所有條件,並基於哪些索引適用/目標選擇的大小/等等來決定最佳訂單...

+0

優秀的,這就是我的一種思想,但想通這將是很好的瞭解以供將來參考。 謝謝! – javanix 2009-10-07 22:39:26

0

這取決於您的索引。如果(line_type,line_order)有多個索引,則第一個查詢更快。如果你有一個索引(line_order,line_type),第二個更快。這是因爲對於多列主鍵,MySQL只能按順序進行比較。否則,沒有區別。

HTH -

克里斯

+0

這是不正確的。兩個查詢在兩個索引上都完全相同; **索引**中的哪一個將使查詢執行得更快取決於表/索引中有多少匹配的行。例如,如果表中所有(或絕大多數)行都將'line_type'設置爲'section_intro'或'question',則(line_type,line_order)上定義的索引完全不會被使用。 – ChssPly76 2009-10-07 23:06:52

相關問題