0
我想比較查詢在特定索引存在的情況下與索引不存在時的性能SSMS的執行計劃窗口。創建一個索引並將其用作同一批處理中的SELECT語句中的提示SQL SERVER 2012
我正在使用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;
它給了我下面的錯誤信息:
指數 'IX_SalesOrderDetail_SALESDETAIL' 對錶 'Sales.SalesOrderDetail' 不存在(在FROM子句中指定)。
我期待在上一行創建的索引將可用於下一行。
任何機構能指導我發生什麼事情或者我缺少什麼或者如何實現我所尋找的?
並採取暗示。認真。它似乎是99.999%不需要 - 選擇索引時,sql server不是愚蠢的。 – TomTom 2014-10-22 07:31:23
@ jeroen,我想你並不完全正確。即使我刪除了第一個select語句並僅使用第二個select語句,也會發生同樣的問題。 如果你的意思是別的,你可以添加更多的細節或給樣品嗎? – Satyajit 2014-10-22 07:55:37
該聲明將被編譯兩次。一旦編譯了批處理,那麼添加索引將在執行時導致重新編譯。因此,它應該自動提取索引的存在,而無需提示。 – 2014-10-22 07:57:15