具有不同排序方向的多列上的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数据库 唯一索引 非唯一索引 聚集索引 非聚集索引 之间区别