我希望使用SSMS的执行计划窗口比较存在特定索引的情况与不存在索引的情况之间的查询性能。
我正在使用AdventureWorks2012数据库。 以下是我的示例查询。
SELECT TOP 10000 SalesOrderID, SalesOrderDetailID, CarrierTrackingNumber
, OrderQty, ProductID, SpecialOfferID, UnitPrice, UnitPriceDiscount, LineTotal, rowguid, ModifiedDate
FROM Sales.SalesOrderDetail
where SalesOrderID = 57058;
CREATE NONCLUSTERED INDEX IX_SalesOrderDetail_SALESDETAIL ON Sales.SalesOrderDetail
(SalesOrderID, SalesOrderDetailID, CarrierTrackingNumber
, OrderQty, ProductID, SpecialOfferID, UnitPrice, UnitPriceDiscount, LineTotal, rowguid, ModifiedDate)
SELECT TOP 10000 SalesOrderID, SalesOrderDetailID, CarrierTrackingNumber
, OrderQty, ProductID, SpecialOfferID, UnitPrice, UnitPriceDiscount, LineTotal, rowguid, ModifiedDate
FROM Sales.SalesOrderDetail WITH(INDEX(IX_SalesOrderDetail_SALESDETAIL))
where SalesOrderID = 57058;
它给我以下错误消息:
Index' IX_SalesOrderDetail_SALESDETAIL'在桌子上' Sales.SalesOrderDetail' (在FROM子句中指定)不存在。
我期待在上一行中创建的索引可用于下一行。
任何人都可以指导我出错或者我错过了什么,或者如何实现我想要的目标?
答案 0 :(得分:3)
每批次进行编译,而不是按行进行。在第一个SELECT
发生或创建索引之前,需要为第二个SELECT
设计一个计划,该计划因索引尚不存在而失败。
在GO
之后加CREATE INDEX
开始新批次。