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

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

【问题讨论】:

    标签: tsql indexing collation


    【解决方案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 语句中的列中。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-05
      • 2018-07-01
      • 2012-06-08
      • 2010-10-07
      • 2020-12-16
      • 2012-01-21
      • 2014-08-15
      • 1970-01-01
      相关资源
      最近更新 更多