2009-06-30 63 views
5

如果更改where條件的值,選擇查詢是否可以使用不同的索引?相同的查詢使用不同的索引?

以下兩個查詢使用不同的指標,唯一的區別是的 條件和typeenvoi =「出口」或與typeenvoi =「郵件」

select numenvoi,adrdest,nomdest,etat,nbessais,numappel,description,typeperiode,datedebut,datefin,codeetat,codecontrat,typeenvoi,dateentree,dateemission,typedoc,numdiffusion,nature,commentaire,criselcomp,crisite,criservice,chrono,codelangueetat,piecejointe, sujetmail, textemail 
      from v_envoiautomate 
      where etat=0 and typeenvoi='EXPORT' 
      and nbessais<1 


select numenvoi,adrdest,nomdest,etat,nbessais,numappel,description,typeperiode,datedebut,datefin,codeetat,codecontrat,typeenvoi,dateentree,dateemission,typedoc,numdiffusion,nature,commentaire,criselcomp,crisite,criservice,chrono,codelangueetat,piecejointe, sujetmail, textemail 
      from v_envoiautomate 
      where etat=0 and typeenvoi='MAIL' 
      and nbessais<1 

誰能給我一個解釋的價值?

回答

8

有關索引的詳細信息在SQL Server中的直方圖類型數據集中存儲爲統計信息

每個索引被分塊成範圍內,並且每個範圍包含該範圍內所涉及的密鑰值的摘要,像:在

  • 數的範圍內

    • 範圍內的高值
    • 數量的值在範圍(基數)等於高值不同的值
    • 數量的值的

    ...的d等等。

    您可以查看在給定指標的統計信息:

    DBCC SHOW_STATISTICS(<tablename>, <indexname>) 
    

    每個索引有一個像密度,最終選擇性幾個特點,告訴查詢優化器是如何獨特的每個值一個索引可能是,並且這個索引在快速定位記錄方面的效率如何。

    由於您的查詢在where子句中有三列,所以這些列中的任何一列都可能具有對優化程序有用的索引。如果其他指數的選擇性不夠高,主要指標也可能會被考慮。

    歸根結底,它歸結爲優化程序快速判斷需要多少頁讀取以讀取每個非聚簇索引+書籤查找,並與其他值進行比較,與執行表掃描。

    這些判斷依據的統計數字也可能大相徑庭;默認情況下,SQL Server僅對任何重要表的行的一小部分進行採樣,因此該索引的選擇性可能不代表整體。如果索引中具有高度非唯一鍵,這尤其成問題。

    在這個特定的情況下,我猜你的typeenvoi指數是非常不唯一的。因此,所收集的統計數據可能向優化者指出,其中一個值比另一個值更稀少,並且選擇該指數的可能性增加。

  • 2

    可能與「基數」有關,我相信這個詞是表中的值。如果有更多的行匹配該子句,則SQL Server可能會決定使用不同列的索引來提高一個查詢的效率。這是一個極端的例子,但是如果有一行匹配'MAIL',那麼它可能會使用該索引。如果表中的每一行都是'EXPORT',但只有一半'EXPORT'行的etat爲0,那麼它可能會使用該列上的索引。

    +1

    @Lazy Bobo:你的推理是正確的,但我相信你所尋找的「單詞」是「選擇性」,即基於數據值分佈的列的選擇性 – 2009-06-30 09:05:08

    4

    SQL Server中的查詢優化器(與大多數現代DBMS平臺一樣)使用稱爲「基於成本的優化」的方法。爲了做到這一點,它使用關於數據庫中表的統計數據來估計所需的I/O量。優化器將考慮通過轉換通過解析語句生成的基本查詢計劃生成的許多語義等價的查詢計劃。

    每個計劃都是基於維護的關於這些表的統計數據的啓發式評估成本。統計進來的各種口味的:

    • 表和索引的行數在各列中的值的

    • 分佈的直方圖。

    如果分佈直方圖中「MAIL」與「EXPORT」的出現顯着不同,查詢優化器可以提出不同的最優計劃。這可能是發生了什麼事。