同じ結果を返すが異なる実行計画を生成する 2 つのステートメントがあります。
- まず >>> インデックスシーク
- 2回目 >>> インデックススキャン
誰でも理由を説明できますか?
例
CREATE TABLE OrderDetails (intOrderId int, intItemId int, dtOrderDate Datetime, intQty int, intPrice int, intDiscount int)
GO
CREATE CLUSTERED INDEX CI_OrderId ON OrderDetails(intOrderId)
GO
CREATE NONCLUSTERED INDEX NCI_ItemId ON OrderDetails(intItemId)
GO
-- Populate Data
SET NOCOUNT ON
DECLARE @i int
SET @i =10
WHILE @i < 100000
BEGIN
INSERT INTO OrderDetails
VALUES (@i, round(rand()*9999,0)+1, getdate() - round(rand()*999,0), round(rand()*99,0)+1, round(rand()*9999,0)+1, round(rand()*99,0)+1)
SET @i = @i + 1
END
GO
-- Check Execution Plans
-- NCI SEEK
SELECT intOrderId, intItemId
FROM OrderDetails
WHERE intItemId = 600 * 10
-- NCI SCAN
SELECT intOrderId, intItemId
FROM OrderDetails
WHERE intItemId/10 = 600