4

我有一个数据库,我在其中运行分析器和数据库顾问来提高数据库的性能。我做到了,到目前为止一切都很好,顾问向我展示了许多可以创建以获得更好性能的索引和统计数据。但是阅读我遇到的陈述:

CREATE NONCLUSTERED INDEX [_dta_index_xinfobaseacl_11_397426127__K3_K7_K1_K5] ON [dbo].[xinfobaseacl] 
(
    [lviewid] ASC,
    [lparentid] ASC,
    [lid] ASC,
    [xlactor] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
go

CREATE NONCLUSTERED INDEX [_dta_index_xinfobaseacl_11_397426127__K7_K5_K1_K3] ON [dbo].[xinfobaseacl] 
(
    [lparentid] ASC,
    [xlactor] ASC,
    [lid] ASC,
    [lviewid] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
go

相同的表,相同的列,相同的参数,只是列的其他排序顺序......

所以我很困惑,排序顺序在索引创建中真的很重要吗???

4

2 回答 2

3

是的,复合索引中列的顺序很重要。

对于所有 4 列上的相等谓词,它们都同样适用。

但第一个将另外支持查询,如

WHERE lviewid =  1 AND lparentid 1 AND lid = 1
ORDER BY xlactor

第二个将支持查询,例如

WHERE parentid =  1 AND xlactor = 1
ORDER BY lid, xlactor

是否应该创建两个索引取决于您的工作量。您是否向 DTA 提供了具有代表性的工作负载,包括数据修改声明?

于 2013-10-17T09:40:38.383 回答
1

你混淆了术语。排序顺序没有很大的影响(如果有的话),但索引中列的顺序可能很重要。

复合索引的正确列顺序取决于您的查询,但根据经验,具有最少不同值的列应该排在第一位。

于 2013-10-17T09:32:04.053 回答