【问题标题】:Use and search by indexes [closed]按索引使用和搜索[关闭]
【发布时间】: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


    【解决方案1】:

    您当然应该尝试使用您的数据库,但数据库应该能够在OR 的情况下应用索引。最好写成:

    WHERE [Name] IS NULL AND Type IN (1, 4)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      相关资源
      最近更新 更多