具有不同排序方向的多列上的Sql server聚集索引

Posted

技术标签:

【中文标题】具有不同排序方向的多列上的Sql server聚集索引【英文标题】:Sql server clustered index on multiple column with different sort direction 【发布时间】:2015-03-31 05:49:01 【问题描述】:

我可以在具有不同排序方向的多个列上创建聚集索引吗?例如 在 Table1 上创建聚集索引 IX_Name(Empid asc,empname desc,sal asc)

如果答案是肯定的,我很想知道如何,因为聚集索引以一种特定的顺序存储数据,在上述情况下,我们希望在三个不同的排序方向上创建索引。

提前致谢

【问题讨论】:

如果您按“Empid asc,empname desc,sal asc”的顺序查询数据,那么您按此顺序获取数据,是吗?聚集索引(按此顺序)的排序方式相同。 我不明白这种混淆。作为一个简化的示例,考虑两列 (a desc, b asc) 和四行的索引 - (1,a)(2,a)(1,b)(2,b)。好吧,我们按该规范对它们进行排序,并按(2,a)(2,b)(1,a)(1,b) 的顺序对它们进行索引。就是这样。 【参考方案1】:

是的,你可以,而且索引的值甚至不需要是唯一的,如果不是,SQL Server 将为每一行附加一个行标识符以使其唯一

【讨论】:

【参考方案2】:

基于单个Unique/Primary key的簇索引,在此基础上制作B-Tree,如果要在多个列上使用,我们不能说cluster索引,它会非集群索引,因为在非集群索引中我们使用多列。

【讨论】:

以上是关于具有不同排序方向的多列上的Sql server聚集索引的主要内容,如果未能解决你的问题,请参考以下文章

SQL SERVER数据库 唯一索引 非唯一索引 聚集索引 非聚集索引 之间区别

SQL 多列排序

SQL 多列排序

SQL Server:日期时间、ASC 或 DESC 上的聚集索引

SQL- 基础知识梳理 - 索引

SQL Server 中多列的动态排序