我正在创建带有主键聚集索引的表。当我创建时不使用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
答案 0 :(得分:1)
默认为ASC。这取决于执行哪种搜索。使用身份验证时,ASC效率更高。
答案 1 :(得分:1)
索引存储为二叉树,因此我想说性能不会有任何差异。
在ASC和DESC两种情况下,SQL都必须下降才能获取叶子(记录包含在转述中)。
答案 2 :(得分:1)
升序更有效。我使用过的所有RDBMS都是如此,这是出于多种原因。 SQL Server中降序排序(有序向后扫描)的最大问题是有序向后扫描无法利用并行执行计划。
请记住,排序的n(log n)复杂度比线性慢。换句话说,随着您添加更多的行,每一行的排序成本会更高。这就是为什么优化器经常选择并行执行计划来处理排序的原因。如果要排序的行很多,则希望优化器选择并行化排序的选项。因此,再次-提升效率更高。
在执行有序向后扫描时,优化器无法使用其他优化。例如,使用分区窗口函数(使用OVER子句和PARTITION BY的函数)时,升序通常更有效。
以下是有关该主题的两篇非常好的文章(均由Itzik Ben-Gan撰写):