SELECT TOP 10
[Trade_US_PC].[ID]
FROM
[Trade_US_PC]
INNER JOIN
[Item] ON ([Trade_US_PC].[ItemID] = [Item].[ID])
WHERE
([Trade_US_PC].[ItemTraitsID] = 14)
ORDER BY
[Item].Name_EN
Trade_US_PC.ID
和Item.ID
是主鍵[Trade_US_PC].[ItemID]
是Item.ID
外鍵和被索引CREATE INDEX IX_Trade_US_PC_ItemID ON Trade_US_PC(ItemID);
[Trade_US_PC].[ItemTraitsID]
是另一個表上的可空列外鍵,並且是空間索引CREATE NONCLUSTERED INDEX FTIX_Trade_US_PC_ItemTraitID ON Trade_US_PC(ItemTraitsID) WHERE ItemTraitsID IS NOT NULL;
Item.Name_EN
被索引CREATE INDEX IX_Item_Name_EN ON Item(Name_EN)
問題是,執行Top 10
和order by
當查詢未使用Name_EN
索引。
我能做些什麼來擺脫昂貴的前N個排序的?
你爲什麼覺得它很慢?讀數的數量是多少(「SET STATISTICS IO ON」)?查詢計劃時間總是必須使其所有操作總計達到總執行時間的100%,因此某個地方總是有很高的百分比,但這並不意味着該部分效率不高或速度慢。 – Igor
@Igor我的表超過了40萬行,查詢甚至在5分鐘內無法完成。 – Steve
如果您刪除了ORDER BY,那麼持續時間是多少?還有從SET STATISTICS IO ON讀取的結果是什麼(對讀取和掃描感興趣)。你也可以提供DDL嗎? – Igor