聚簇索引默认排序顺序

时间:2019-05-09 11:46:30

标签: sql-server tsql sql-server-2008 sql-server-2012 sql-server-2008-r2

我正在创建带有主键聚集索引的表。当我创建时不使用asc / desc时,默认的排序顺序是什么?哪种排序顺序(ASC或DESC)更有效?这是示例代码。

Create table employee (
  Name nvarchar(30),
  City nvarchar(30),
  Dob date,
  Constraint pk_employee primary key clustered
  (Name asc, dob asc)
)
Go

3 个答案:

答案 0 :(得分:1)

默认为ASC。这取决于执行哪种搜索。使用身份验证时,ASC效率更高。

答案 1 :(得分:1)

索引存储为二叉树,因此我想说性能不会有任何差异。

在ASC和DESC两种情况下,SQL都必须下降才能获取叶子(记录包含在转述中)。

答案 2 :(得分:1)

升序更有效。我使用过的所有RDBMS都是如此,这是出于多种原因。 SQL Server中降序排序(有序向后扫描)的最大问题是有序向后扫描无法利用并行执行计划。

请记住,排序的n(log n)复杂度比线性慢。换句话说,随着您添加更多的行,每一行的排序成本会更高。这就是为什么优化器经常选择并行执行计划来处理排序的原因。如果要排序的行很多,则希望优化器选择并行化排序的选项。因此,再次-提升效率更高。

在执行有序向后扫描时,优化器无法使用其他优化。例如,使用分区窗口函数(使用OVER子句和PARTITION BY的函数)时,升序通常更有效。

以下是有关该主题的两篇非常好的文章(均由Itzik Ben-Gan撰写):

SQL Server: Avoiding a Sort with Descending Order

Descending Indexes