MS SQL索引列排序顺序很重要?

时间:2013-10-17 09:29:37

标签: sql-server indexing

我有一个数据库,我运行探查器和数据库顾问程序来提高数据库的性能。我做了,到目前为止很好,顾问给我提供了很多索引和统计数据,可以创建以获得更好的性能。 但阅读我遇到的陈述:

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

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

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

2 个答案:

答案 0 :(得分: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提供了代表性的工作量,包括数据修改声明?

答案 1 :(得分:1)

你的术语令人困惑。排序顺序没有很好的影响(如果有的话),但索引中列的顺序可能很重要。

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

相关问题