SQL Server 中索引的排序规则

Posted

技术标签:

【中文标题】SQL Server 中索引的排序规则【英文标题】:Collations on indexes in SQL Server 【发布时间】:2011-09-06 03:59:12 【问题描述】:

我有兴趣在创建与该列的排序规则不同的索引时为该列指定排序规则吗? 而在索引的时候,字符串数据是按照列排序还是按照数据库排序呢?

【问题讨论】:

【参考方案1】:

您可以使用所需的排序规则创建计算字段并在该字段上创建索引。

【讨论】:

@Pacerier 如果我没看错文档,您不需要使用 PERSISTED 在计算列上创建索引。【参考方案2】:

我不相信你可以。尽管 COLLATE 单独记录,但您会注意到仅列出了 3 个可能发生的位置:

创建或更改数据库 创建或更改表列 强制转换表达式的排序规则

请注意,例如,在CREATE TABLE:

<column_definition> ::=
column_name <data_type>
    [ FILESTREAM ]
    [ COLLATE collation_name ] 
    ...

明确提到了 COLLATE 子句。

而在CREATE INDEX:

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name 
    ON <object> ( column [ ASC | DESC ] [ ,...n ] ) 
    ...

请注意,此处允许的只是列 - 不是列定义,也不是表达式。


我相信索引中每一列的排序规则都遵循相应表中基础列的排序规则。据我所知,除了在 CREATE/ALTER 表语句期间为列提供默认排序规则之外,数据库排序规则的使用并不多。

【讨论】:

【参考方案3】:

尝试创建一个索引视图并将排序规则添加到 select 语句中的列中。

【讨论】:

我相信这样的表现会很糟糕,dev.mysql.com/doc/refman/5.0/en/view-restrictions.html,percona.com/blog/2007/08/12/…,首先打败了整个索引点..... @Pacerier 我知道这是旧的,但我想指出您链接到有关错误平台的信息。 2014 年,SQL Server 拥有比 MySQL 文档中描述的更高级的视图和更好的性能潜力。

以上是关于SQL Server 中索引的排序规则的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 排序规则的影响

SQL Server转换数据库的排序规则

SQL server中如何更改排序规则

在 SQL 2005 中更改聚集索引列的排序规则

全库修改SQL Server现有排序规则

SQL Server 2008 R2 中不同数据库排序规则之间的排序规则冲突