我有一个查询,看起来像这样:索引扫描与探针代替索引查找
--Updated To remove Distinct per Aaron Bertrand's suggestion in the comments
SELECT TOP 100 ord.OrderId
FROM Customer cust
JOIN CustomerOrder ord
ON ord.CustomerId = cust.CustomerId
WHERE cust.FirstName LIKE (@firstName + '%')
ORDER BY ord.CreatedWhen DESC
而且我有一个这样的指标:
CREATE NONCLUSTERED INDEX [IX_MyIndex] ON CustomerOrder
(
OrderId DESC,
CustomerId DESC,
CreatedWhen Desc
)
GO
当我运行我的查询中,索引被使用,但它是一个索引扫描。和它给这样的信息:([Bitmap1011],[MyDatabase的] [顺序] [CustomerOrder] [单编号]如[ORD] [单编号],N '[IN ROW]'。)
PROBE
输出列表由OrderId和CreatedWhen组成。
这是什么探测器在做什么,为什么我没有得到一个索引寻求?
UPDATE:
在客户表中的名字列确实具有在一个INDEXSEEK正在使用的索引。
CREATE NONCLUSTERED INDEX [IX_Customer_FirstName] ON Customer
(
[FirstName] ASC
)
GO
为什么你需要独特?你真的可以有两个具有相同的ID和创建日期不同的订单吗?你也可以使数控指数独一无二......虽然没有一个聚集索引可以促进这一点吗? – 2014-10-02 15:46:29
另外,为什么你期望在这个索引上寻找一个方法,何时你的where子句在一个甚至没有被这个索引覆盖的列上过滤(不必介意主要的列)? – 2014-10-02 15:50:36
@AaronBertrand - 我正在使用的FirstName上有另一个索引。 – Vaccano 2014-10-02 15:54:30