我有一个数据库,我运行分析器和数据库顾问来提高数据库的性能。我做得很好,顾问给了我很多索引和统计数据,可以创建更好的性能。 但是看完我就遇到了这个语句:MS SQL索引列排序顺序很重要?
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
同桌,同列,相同的参数,列的只是其他排序顺序...
所以我很困惑,不排序顺序索引创建真的很重要?
这意味着,如果WHERE语句中的用法正确,我们必须查找所有源代码索引的排序顺序以防止相同内容的多个索引,我是对不对?由于这是由顾问创建的,因此我们可能会在WHERE语句中使用不同排序顺序对相同内容进行查询。 – YvesR
并且:如果错误的排序顺序用法的索引不存在,他将不会使用其他现有的索引,是否正确? – YvesR
@YvesR - 如果您的第一条评论是询问WHERE中谓词的顺序是否需要与索引定义中的谓词相同,那么答案是“no”。由于'lviewid'是第一个索引中的第一列,而第二个索引中的最后一列没有两个索引可以寻找的列的子集。因此,除了所有4列上的相等谓词的情况外,它们通常会帮助支持不同的查询。 –