主键Ascending与Descending

时间:2009-03-16 04:57:38

标签: sql-server indexing primary-key

在Sql Server中,我有一个带有Identity主键的表。通常我想要最新的几条新记录,所以我通过降低主键来获取排序的前n个。我应该将主键索引定义为降序,还是没有区别?即如果它们按升序排列,那么sql可以有效地向后工作吗?

2 个答案:

答案 0 :(得分:36)

从纯粹的查询角度来看,如果您想要提取N个最近或N个最早的记录,那么您的密钥是下降还是上升没有区别:

  

SQL Server的内部算法可以在单列索引上双向导航,无论密钥存储的顺序如何。例如,在单列索引上指定DESC不会使使用ORDER BY IndexKeyCol DESC子句的查询运行得比为索引指定ASC更快。

http://msdn.microsoft.com/en-us/library/aa933132(SQL.80).aspx

然而几乎在任何正常情况下,您希望主键升序并且通常顺序以防止碎片。 SQL Server经过优化,可以将新记录物理地附加到数据库文件的末尾。如果它需要在顶部插入每个新记录并将所有内容推下来,则可能会导致几乎100%的碎片。

答案 1 :(得分:4)

绝对没有区别。

我甚至无法想象为什么可以以任何方式宣布它。