WEB开发网
开发学院数据库MSSQL Server 海量数据库查询优化及分页算法 阅读

海量数据库查询优化及分页算法

 2008-08-30 09:56:49 来源:WEB开发网   
核心提示: (1)仅在主键上建立聚集索引,并且不划分时间段:Selectgid,fariqi,neibuyonghu,titlefromtgongwen用时:128470毫秒(即:128秒)(2)在主键上建立聚集索引,海量数据库查询优化及分页算法(7),在fariq上建立非聚集索引:selectgid

(1)仅在主键上建立聚集索引,并且不划分时间段:

Selectgid,fariqi,neibuyonghu,titlefromtgongwen

用时:128470毫秒(即:128秒)

(2)在主键上建立聚集索引,在fariq上建立非聚集索引:

selectgid,fariqi,neibuyonghu,titlefromTgongwen
wherefariqi>dateadd(day,-90,getdate())

用时:53763毫秒(54秒)

(3)将聚合索引建立在日期列(fariqi)上: 

selectgid,fariqi,neibuyonghu,titlefromTgongwen
wherefariqi>dateadd(day,-90,getdate())

用时:2423毫秒(2秒)

虽然每条语句提取出来的都是25万条数据,各种情况的差异却是巨大的,特别是将聚集索引建立在日期列时的差异。事实上,如果您的数据库真的有1000万容量的话,把主键建立在ID列上,就像以上的第1、2种情况,在网页上的表现就是超时,根本就无法显示。这也是我摒弃ID列作为聚集索引的一个最重要的因素。

得出以上速度的方法是:在各个select语句前加:declare @d datetime

set @d=getdate()

并在select语句后加:

select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())

2、只要建立索引就能显著提高查询速度

事实上,我们可以发现上面的例子中,第2、3条语句完全相同,且建立索引的字段也相同;不同的仅是前者在fariqi字段上建立的是非聚合索引,后者在此字段上建立的是聚合索引,但查询速度却有着天壤之别。所以,并非是在任何字段上简单地建立索引就能提高查询速度。

从建表的语句中,我们可以看到这个有着1000万数据的表中fariqi字段有5003个不同记录。在此字段上建立聚合索引是再合适不过了。在现实中,我们每天都会发几个文件,这几个文件的发文日期就相同,这完全符合建立聚集索引要求的:“既不能绝大多数都相同,又不能只有极少数相同”的规则。由此看来,我们建立“适当”的聚合索引对于我们提高查询速度是非常重要的。

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:海量 数据库 查询

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接