在Sql Server中,我有一个带有Identity主键的表。通常我想要最新的几条新记录,所以我通过降低主键来获取排序的前n个。我应该将主键索引定义为降序,还是没有区别?即如果它们按升序排列,那么sql可以有效地向后工作吗?
答案 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)
绝对没有区别。
我甚至无法想象为什么可以以任何方式宣布它。