小编Hoo*_*cat的帖子

查询优化器建议添加索引而不是使用现有索引

我试图确定为什么 SQL Server 中的查询优化器建议创建一个新索引,而不是使用似乎足以进行查询的现有索引。

首先是桌子。列名已更改以保护无辜者:-)

CREATE TABLE [myTable] (
  [id] [int] IDENTITY(1,1) NOT NULL,
  [serialNumber] [varchar](12) NOT NULL,
  [sName] [varchar](64) NOT NULL,
  [meanValue] [int] NOT NULL,
  [range] [int] NOT NULL,
  [modifiedDate] [datetime] NOT NULL,
  CONSTRAINT [PK_myTable] PRIMARY KEY CLUSTERED ( [id] ASC )
)
Run Code Online (Sandbox Code Playgroud)

创建有问题的索引:

CREATE NONCLUSTERED INDEX [IDX_myIndex]
ON [myTable] ([serialNumber], [sName], [meanValue], [range])
INCLUDE ([modifiedDate])
Run Code Online (Sandbox Code Playgroud)

添加数据以使用您选择的生成器进行测试;-) 运行以下查询(表只有几百万条记录)

SELECT TOP 1000
  [serialNumber],
  [sName],
  [meanValue],
  [range],
  [modifiedDate]
FROM [myTable]
WHERE [serialNumber] = 137802
AND [sName] = 'A Name'
Run Code Online (Sandbox Code Playgroud)

查询优化器建议使用新索引,其中额外的 where …

performance index sql-server nonclustered-index query-performance

7
推荐指数
1
解决办法
418
查看次数