您的位置:首页 > 其它

关于在时间列上建聚集索引的一点讨论

2012-03-05 14:31 218 查看
近期接手一个关系类网站的项目,里面经常会用到时间排序 比如最新发的帖子要排在上面需要找出最近发言,最近加入的5个成员等等。网上有个哥们提出一种解决方案,说在时间列上建聚集索引,他也测试了效率非常好。但他在为什么有不错的效率上一直没有拿出比较合理的解释。

我决心把这个问题给搞定了:于是做了以下测试:

CREATE TABLE [dbo].[testindex](

[id] [int] IDENTITY(1,1) NOT NULL,

[adate] [datetime] NOT NULL,

[bdate] [datetime] NOT NULL,

CONSTRAINT [PK_testindex] PRIMARY KEY NONCLUSTERED

如图的表 ID主键 非聚集索引 自增 起点 1 步长1

.adate 建立聚集索引

。bdate 上建非聚集索引

上图是打开SQLSERVER表编辑器的截图

Id这列可以看出记录的插入顺序

而 从adate这列可以看出 整张表是按时间的倒叙存放的(因为这上有倒叙聚集索引)

所以 在这列上排序是很高效的

同时 聚集索引的特性是判断等值效率高:

但同时也要注意前提:

Adate 这列最好不更新 不删除 只插入(幸运的是我这个项目刚好符合这个条件)

大多数项目应该在日期列上更新都比较少 删除最好都做成假删除,虽然多些记录单少了数据库重构索引也是值得的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: