私はこれに完全に混乱しています。SQL Server 2017 テーブルにカバリング インデックスを追加したところ、統合テストが失敗しました。
問題を説明する簡単な SQL を次に示します。
CREATE TABLE MyColumns (ColumnID INT PRIMARY KEY, LookupCodeTypeID INT)
INSERT INTO MyColumns (ColumnID, LookupCodeTypeID)
VALUES (18, 37)
CREATE TABLE MyCodes (CodeID INT PRIMARY KEY, CodeTypeID INT, Code NVARCHAR(50), IsDeleted BIT)
INSERT INTO MyCodes (CodeID, CodeTypeID, Code, IsDeleted)
VALUES (1, 12, 'North', 0), (2, 12, 'South', 0), (19, 37, '0', 0),
(20, 37, '1', 0), (21, 37, '2', 1), (22, 37, '3', 0)
SELECT CAST(Code AS INT) AS CodeIndex
FROM MyCodes
INNER JOIN MyColumns ON LookupCodeTypeID = CodeTypeID
WHERE ColumnID = 18 AND IsDeleted = 0
ORDER BY CodeIndex
-- This index was created for other reasons but the following SQL broke
CREATE NONCLUSTERED INDEX IX1_MyCodes ON MyCodes (CodeTypeID) INCLUDE (Code)
SELECT CAST(Code AS INT) AS CodeIndex
FROM MyCodes
INNER JOIN MyColumns ON LookupCodeTypeID = CodeTypeID
WHERE ColumnID = 18 AND IsDeleted = 0
ORDER BY CodeIndex
インデックスは別の問題を解決するために作成されましたが、失敗したテストによりこのコードにたどり着きました。
問題を再現する例を作成しようとすると、このコードIsDeleted
ではカバリング インデックスに追加すると問題が解決することがわかりますが、これは私が期待していたものではありません。
テストで問題が浮き彫りになったのでIsDeleted
、カバー インデックスに追加します。
私の質問は、なぜ SQL が壊れたのかということです。コードの一部だけが統合テストを行っているため、他に何が壊れる可能性があるかをどのように予測できますか?