2010-06-16 74 views
1

這個問題受到SO上發佈的上一個問題的啓發,「WHERE子句的順序是否有所不同?」。如果將WHERE部分中使用的列放置在SELECT語句的開頭,它是否會提高SELECT語句的性能?SELECT語句中列的順序是否有所不同?

例如:

SELECT customer.id, 
      transaction.id, 
      transaction.efective_date, 
      transaction.a, 
      [...] 
     FROM customer, transaction 
    WHERE customer.id = transaction.id; 

我知道限制列的列表,只需要的那些在SELECT語句可以提高性能,而不是使用SELECT *,因爲當前的列表更小。

+1

我無法想象這樣一種情況,即SELECT語句的順序*在* any *數據庫中的查詢性能上可能會產生任何影響。 – 2010-06-17 01:24:14

回答

7

對於Oracle和Informix以及任何其他自我尊重的DBMS,列的順序應該不會影響性能。同樣,查詢引擎找到處理Where子句的最佳順序應該是這樣,所以順序不應該等於所有事物都相等(即,查看可能強制執行順序的構造)。

+0

好的,無論如何,我有一個習慣,把它們放在與我的WHERE部分中的列相同的順序,因爲如果需要的話,它使我更容易可視化和更新語句。我也只放了所需的列,認爲優化器將創建一個較小的當前列表與整個行集合的當前列表。 – 2010-06-17 00:55:49

+1

@Frank:你的自律規則絕對沒有壞處,但它不會改變查詢的性能。 – 2010-06-17 05:17:12

+1

基於規則的優化器確實使用了where子句的排序,但沒有使用CBO。 (見http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1857060700346051220) – 2010-06-17 06:59:51

相關問題