我有了這個在它的心臟的實體框架查詢:nvarchar的前綴會導致錯誤的索引被選中
SELECT 1 AS dummy
FROM [dbo].[WidgetOrder] AS widgets
WHERE widgets.[SomeOtherOrderId] = N'SOME VALUE HERE'
該執行計劃選擇一個指標是三列的組合。 這需要10到12秒。
但是,有一個索引只是[SomeOtherOrderId]和其他幾列在「include」中。這是應該使用的索引。當我運行下面的查詢使用它:
SELECT 1 AS dummy
FROM [dbo].[WidgetOrder] AS widgets
WHERE widgets.[SomeOtherOrderId] = CAST(N'SOME VALUE HERE' AS VARCHAR(200))
SELECT 1 AS dummy
FROM [dbo].[WidgetOrder] AS widgets
WHERE widgets.[SomeOtherOrderId] = 'SOME VALUE HERE'
這立即返回。而且它使用的只是SomeOtherOrderId
所以,我的問題是,我真的不能改變實體框架是怎樣使查詢索引。
有什麼我可以做從索引的角度來看,可能會導致正確的索引被選中?
的問題是SQL具有轉換每'SomeOtherOrderId'爲unicode,所以你的指數變得usless,它需要恢復的到索引掃描而不是查找。我可以建議的唯一的事情,我不知道它是否會起作用,就是在表格上放一個視圖,並將'SomeOtherOrderId'作爲一個nvarchar,併爲視圖建立索引 - 但有些東西告訴我你不能去做。如果有效,查詢視圖,而不是表格。 – JiggsJedi
@JiggsJedi - 謝謝,至少我知道爲什麼它現在正在做它正在做的事情。 – Vaccano