【发布时间】:2021-02-14 07:35:33
【问题描述】:
假设我有这张表,其索引如下:
CREATE TABLE [dbo].[Jobs]
(
[Id] BIGINT NOT NULL PRIMARY KEY IDENTITY(1,1),
[Type] SMALLINT NOT NULL,
[Path] NVARCHAR(MAX),
[Name] VARCHAR(256),
)
GO
CREATE INDEX [IX_Jobs_Name_Type] ON [dbo].[Jobs] ([Name], [Type])
哪个查询会有更好的性能:
1.
UPDATE TOP((@JobCount + 3) / 4 )
Jobs WITH (ROWLOCK, READPAST)
SET [Name] = @NName
WHERE [Name] IS NULL AND (Type = 1 OR Type = 4)
UPDATE TOP((@JobCount + 3) / 8 )
Jobs WITH (ROWLOCK, READPAST)
SET [Name] = @NName
WHERE [Name] IS NULL AND Type = 1
UPDATE TOP((@JobCount + 3) / 8 )
Jobs WITH (ROWLOCK, READPAST)
SET [Name] = @NName
WHERE [Name] IS NULL AND Type = 4
在这种情况下忽略更新行数的正确性, 由于索引的原因,使用“或”对 Type 进行一次搜索是否会不如 2 个单独的查询有效?
【问题讨论】:
标签: sql database indexing database-performance