[英]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.