我有一个where子句,像这样一个SQL查询:3个索引或单个索引与2列在SQL Server 2008中?
Where ManufacturerID = @ManufacturerID
AND ItemID IN (SELECT ItemID FROM @T)
AND RelatedItemID IN (SELECT RelatedItemID FROM @T)
什么会给我最好的表现还是这样做的正确方法? 3个索引 - 每列一个或包含所有3个索引的单个索引?
这里是SP被运行的一个更完整的VIWE:
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的更多细节。它很难理解你在这里试图达到什么。 – 2011-03-28 23:55:21
这取决于此查询的选择列表中的内容以及总体查询工作负载和现有索引。 – 2011-03-29 00:07:02
另外,您是否通过测量确定您有性能问题? – 2011-03-29 00:24:55