Index的排序顺序会影响记录的提取时间吗?

时间:2014-03-15 11:01:14

标签: sql sql-server sql-server-2012

我有一个存储博客信息的表格,信息由列bId标识。

如果第一个博客有bId 1,那么10个帖子之后的最新博客将会bId 10。 但是,可以从任何地方访问此信息,因为任何帖子都可以访问。但是,作为一般性的理解,最新的帖子将比旧的更经常访问。

这意味着有更多机会使用bId 10而不是1来获取信息。

因此,如果我在此blog表的列bId上创建索引,如果我声明index ASCDESC,我的上述情况是否重要或者它会一样吗?

在我的案例中哪一个更合适:CREATE INDEX [IDX_bId] ON [blog] ([bId] ASC);CREATE INDEX [IDX_bId] ON [blog] ([bId] DESC);

2 个答案:

答案 0 :(得分:2)

首先,您可能希望将该索引创建为CLUSTERED。聚簇索引定义实际数据行的顺序;它本质上是表本身的顺序。如果您根本没有定义聚簇索引,那么表就是“堆”,这意味着页面在磁盘上没有特定的顺序存储。

回答你的问题:如果唯一的访问模式是ID,例如:

SELECT * 
FROM blog
WHERE bId = 10

将索引定义为ASC或DESC无关紧要。

但对于这样的查询:

SELECT TOP (100) * 
FROM blog
ORDER BY bID DESC

聚集索引应定义为bID DESC。原因是如果索引是ASC,则此查询将需要执行向后扫描,而向后扫描不能使用并行(如此处所述:http://sqlmag.com/t-sql/descending-indexes)。如果您的表很大,这可能会影响性能。

答案 1 :(得分:1)

总之不是真的。列上的索引将提供最重要的信息。然后,优化器将决定如何最好地检索行。如果您有复合索引,那么它可能会产生影响。