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