SQL Server中索引上的排序规则

10

我想知道在创建索引时是否有可能为列指定不同于该列排序规则的排序规则? 并且在进行索引后,字符串数据是按照列的排序规则还是数据库的排序规则进行排序?

3个回答

10

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


1
如果我正确地阅读文档,您不需要使用“PERSISTED”在计算列上创建索引。 - binki

7

我不相信你能。尽管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 ] ) 
    ...

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

我认为索引中每列的排序方式遵循适当表格中底层列的排序方式。据我所知,数据库排序方式不太常用,只有在创建/更改表语句期间提供默认排序方式给列时才会使用。


5
尝试创建一个索引视图并在选择语句中为列添加排序规则。

我相信这个的性能会非常糟糕,http://dev.mysql.com/doc/refman/5.0/en/view-restrictions.html,http://www.percona.com/blog/2007/08/12/mysql-view-as-performance-troublemaker/,这将完全打败索引的初衷... - Pacerier
2
@Pacerier 我知道这已经过时了,但我想指出你链接的是关于错误平台的信息。2014年,SQL Server拥有更先进的视图,具有比那个MySQL文档中描述的更好的性能潜力。 - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接