表格Props
已经列有non-clustered index
列' CreatedOn'但是,为了显着提高频繁运行的查询的查询性能,此索引不会include
某些其他列。
要解决这个问题,最好是;
另外:
下表的简化版本以及相关索引:
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。
答案 0 :(得分:2)
一如既往......这取决于......
作为具有冗余索引的一般规则是不可取的。因此,在没有其他信息的情况下,您最好添加包含的列,使其成为覆盖索引。
也就是说,原始索引可能是针对另一个"高频率"查询...所以现在您必须确定天气是否增加的索引页数会对在其当前状态中使用索引的现有查询产生负面影响。
您还希望查看与查询其余部分相关的密钥查找费用。如果密钥查找仅占总成本的一小部分,则性能增益不太可能抵消维持较大索引的费用。