私はそうのようなwhere句でSQLクエリを持っている:何が私の最高のパフォーマンスを与えるか、またはこれを行うための適切な方法であるでしょう3つのインデックスまたはSQL Server 2008の2つの列を持つ単一のインデックス?
Where ManufacturerID = @ManufacturerID
AND ItemID IN (SELECT ItemID FROM @T)
AND RelatedItemID IN (SELECT RelatedItemID FROM @T)
? 3つのインデックス - 各列に1つ、または3つすべてを含む単一のインデックス?ここ
はSP BEING RUNのより完全なVIWE IS:
DECLARE @T TABLE (
[CategoryID] [int] NOT NULL,
[ManufacturerID] [int] NULL,
[ItemID] [varchar](100) NOT NULL,
[ItemName] [varchar](100) NULL,
[PhotoName] [varchar](150) NULL,
[ModifiedOn] [datetime] NULL,
[ModifiedBy] [varchar](50) NULL,
[IsDeleted] [bit] NOT NULL)
;WITH T As
(SELECT CategoryID, ManufacturerID, ItemID, ItemName, PhotoName, ModifiedOn, ModifiedBy, IsDeleted
FROM StagingCategoryItems
WHERE (ManufacturerID = @ManufacturerID)
EXCEPT
SELECT CategoryID, ManufacturerID, ItemID, ItemName, PhotoName, ModifiedOn, ModifiedBy, IsDeleted
FROM CategoryProducts
WHERE (ManufacturerID = @ManufacturerID)
)
INSERT INTO @T
SELECT *
FROM T
DELETE FROM CategoryProducts WHERE ManufacturerID = @ManufacturerID
AND ItemID IN (SELECT ItemID FROM @T)
AND CategoryID IN(SELECT CategoryID FROM @T)
INSERT INTO [CategoryProducts]
([CategoryID]
,[ManufacturerID]
,[ItemID]
,[ItemName]
,[PhotoName]
,[CreatedOn]
,[CreatedBy]
,[ModifiedOn]
,[ModifiedBy]
,[DeletedOn]
,[DeletedBy]
,[IsDeleted])
SELECT [CategoryID]
,[ManufacturerID]
,[ItemID]
,[ItemName]
,[PhotoName]
,[CreatedOn]
,[CreatedBy]
,[ModifiedOn]
,[ModifiedBy]
,[DeletedOn]
,[DeletedBy]
,[IsDeleted]
FROM [StagingCategoryItems]
WHERE ManufacturerID = @ManufacturerID
AND ItemID IN (SELECT ItemID FROM @T)
AND CategoryID IN(SELECT CategoryID FROM @T)
データの内容、照会しようとしているもの、および完全な照会SQLについてもう少し詳しく説明します。あなたがここで達成しようとしていることを理解するのは難しいです。 –
これは、このクエリの選択リスト、全体的なクエリの作業負荷、および既存のインデックスに含まれる内容によって異なります。 –
また、パフォーマンスの問題があることを測定して決定しましたか? –