【发布时间】:2018-02-17 12:36:42
【问题描述】:
表Props 已经有一个non-clustered index 用于列“CreatedOn”,但该索引没有include 某些其他列,这些列是显着提高频繁运行查询的查询性能所必需的。
最好解决这个问题;
- 1。使用包含的列或
- 2。更改现有索引以将其他列添加为包含列?
另外:
- - 我的决定将如何影响当前使用非聚集索引的其他查询的性能?
- - 如果最好更改现有索引,是否应该删除并重新创建或更改它以添加包含的列?
下表的简化版本以及相关索引如下:
CREATE TABLE dbo.Props(
PropID int NOT NULL,
Reference nchar(10) NULL,
CustomerID int NULL,
SecondCustomerID int NULL,
PropStatus smallint NOT NULL,
StatusLastChanged datetime NULL,
PropType smallint NULL,
CreatedOn datetime NULL,
CreatedBy int NULL
CONSTRAINT PK_Props PRIMARY KEY CLUSTERED
(
PropID ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
GO
当前索引:
CREATE NONCLUSTERED INDEX idx_CreatedOn ON dbo.Props
(
CreatedOn ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
新索引或更改索引中所需的所有 5 列是; foreign key 列,smallint 和 int 的混合,可空和不可空。
在示例中,include 的列是:CustomerID、SecondCustomerID、PropStatus、PropType 和 CreatedBy。
【问题讨论】:
标签: sql sql-server tsql indexing sql-server-2008-r2