簡體   English   中英

查詢優化程序比索引搜索更喜歡索引掃描

[英]Query optimizer prefers index scan over index seek

我正在使用AdventureWorks2012數據庫。

我在Sales.SalesOrderHeader表上創建了以下索引

create index i1 on 
sales.salesorderheader(purchaseordernumber,salespersonid)
   include(orderdate,shipdate)
   where purchaseordernumber is not null
   and salespersonid is not null

當我運行以下查詢時:

select 
    PurchaseOrderNumber,
    OrderDate,
    ShipDate,
    SalesPErsonId

from sales.salesorderheader
where purchaseordernumber like '%po5%' and salespersonid is not null

我希望索引搜索不是索引掃描,因為作為查詢一部分的所有列已經是索引的一部分。

我在某處讀到,如果查詢優化器認為索引掃描比索引查找便宜,那么我們將進行索引掃描。 但是,我不明白為什么在這種情況下會發生這種情況。 我們根本沒有查找。

有人可以解釋一下嗎。

索引就像電話簿一樣工作。 您在哪里尋找電話簿中的%po5% 您必須閱讀整個電話簿,因為您不知道第一個字符。

這就是SQL Server掃描整個索引的原因。 沒有足夠的信息來尋找。

暫無
暫無

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

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