关于在时间列上建聚集索引的一点讨论
2012-03-05 14:31 cluby 阅读(1433) 评论(0) 收藏 举报近期接手一个关系类网站的项目,里面经常会用到时间排序 比如最新发的帖子要排在上面需要找出最近发言,最近加入的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 这列最好不更新 不删除 只插入(幸运的是我这个项目刚好符合这个条件)
大多数项目应该在日期列上更新都比较少 删除最好都做成假删除,虽然多些记录单少了数据库重构索引也是值得的
浙公网安备 33010602011771号