我有一个存储博客信息的表格,信息由列bId
标识。
如果第一个博客有bId
1,那么10个帖子之后的最新博客将会bId
10。
但是,可以从任何地方访问此信息,因为任何帖子都可以访问。但是,作为一般性的理解,最新的帖子将比旧的更经常访问。
这意味着有更多机会使用bId
10而不是1来获取信息。
因此,如果我在此blog
表的列bId
上创建索引,如果我声明index
ASC
或DESC
,我的上述情况是否重要或者它会一样吗?
在我的案例中哪一个更合适:CREATE INDEX [IDX_bId] ON [blog] ([bId] ASC);
或CREATE INDEX [IDX_bId] ON [blog] ([bId] DESC);
?
答案 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)
总之不是真的。列上的索引将提供最重要的信息。然后,优化器将决定如何最好地检索行。如果您有复合索引,那么它可能会产生影响。