我试图确定为什么 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