我有一个数据库,我运行探查器和数据库顾问程序来提高数据库的性能。我做了,到目前为止很好,顾问给我提供了很多索引和统计数据,可以创建以获得更好的性能。 但阅读我遇到的陈述:
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
相同的表,相同的列,相同的参数,列的其他排序顺序......
所以我很困惑,排序顺序在索引创建中真的很重要吗
答案 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)
你的术语令人困惑。排序顺序没有很好的影响(如果有的话),但索引中列的顺序可能很重要。
复合索引的列的正确顺序取决于您的查询,但根据经验,具有最少不同值的列应该是第一个。