小编Apr*_*llo的帖子

数据固有地排序,就好像它是一个聚集索引

我有下表,其中有 750 万条记录:

CREATE TABLE [dbo].[TestTable](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [TestCol] [nvarchar](50) NOT NULL,
    [TestCol2] [nvarchar](50) NOT NULL,
    [TestCol3] [nvarchar](50) NOT NULL,
    [Anonymised] [tinyint] NOT NULL,
    [Date] [datetime] NOT NULL,
CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

我注意到当日期字段上有非聚集索引时:

CREATE NONCLUSTERED INDEX IX_TestTable_Date ON [dbo].[TestTable] ([Date])
Run Code Online (Sandbox Code Playgroud)

- 我运行以下查询:

UPDATE TestTable 
SET TestCol='*GDPR*', TestCol2='*GDPR*', TestCol3='*GDPR*', Anonymised=1
WHERE [Date] <= …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2017

8
推荐指数
1
解决办法
174
查看次数

执行计划中无法解释的排序操作

我正在一个有 750 万条记录的数据库上运行以下查询:

UPDATE TestTable
SET TestCol='1234', TestCol2='1234', TestCol3='1234', Anonymised=1
WHERE [Date] >= '25 June 2016' 
AND [Date] <= '25 August 2016'
Run Code Online (Sandbox Code Playgroud)

出于某种原因,执行计划包括对主键的排序操作。

在此处输入图片说明 在此处输入图片说明

鉴于该列上已经有聚集索引,我不希望它必须对主键进行排序。

任何人都可以解释为什么会发生这种情况以及我可以做些什么来避免排序操作?

编辑:

表创建脚本

CREATE TABLE [dbo].[TestTable](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [TestCol] [nvarchar](50) NOT NULL,
    [TestCol2] [nvarchar](50) NOT NULL,
    [TestCol3] [nvarchar](50) NOT NULL,
    [Anonymised] [tinyint] NOT NULL,
    [Date] [datetime] NOT NULL,
 CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON …
Run Code Online (Sandbox Code Playgroud)

sql-server

3
推荐指数
1
解决办法
592
查看次数

标签 统计

sql-server ×2

sql-server-2017 ×1