海量数库的查询优化及分页算法方案 2.docVIP

  • 2
  • 0
  • 约9.59千字
  • 约 15页
  • 2018-06-08 发布于福建
  • 举报

海量数库的查询优化及分页算法方案 2.doc

海量数库的查询优化及分页算法方案 2

海量数据库的查询优化及分页算法方案 2 海量数据库的查询优化及分页算法方案(22010-07-20 17:569、字段提取要按照需多少、提多少的原则,避免select* 我们来做一个试验: select top 10000 gid,fariqi,reader,title from tgongwen order by gid desc 用时:4673毫秒 select top 10000 gid,fariqi,title from tgongwen order by gid desc 用时:1376毫秒 select top 10000 gid,fariqi from tgongwen order by gid desc 用时:80毫秒 由此看来,我们每少提取一个字段,数据的提取速度就会有相应的提升。提升的速度还要看您舍弃的字段的大小来判断。 10、count(*)不比count(字段)慢 某些资料上说:用*会统计所有列,显然要比一个世界的列名效率低。这种说法其实是没有根据的。我们来看: select count(*)from Tgongwen 用时:1500毫秒 select count(gid)from Tgongwen 用时:1483毫秒 select count(fariqi)from Tgongwen 用时:3140毫秒 select count(title)from Tgongwen 用时:52050毫秒 从以上可以看出,如果用count(*)和用count(主键)的速度是相当的,而count(*)却比其他任何除主键以外的字段汇总速度要快,而且字段越长,汇总的速度就越慢。我想,如果用count(*),SQL SERVER可能会自动查找最小字段来汇总的。当然,如果您直接写count(主键)将会来的更直接些。 11、order by按聚集索引列排序效率最高 我们来看:(gid是主键,fariqi是聚合索引列) select top 10000 gid,fariqi,reader,title from tgongwen 用时:196毫秒。扫描计数1,逻辑读289次,物理读1次,预读1527次。 select top 10000 gid,fariqi,reader,title from tgongwen order by gid asc 用时:4720毫秒。扫描计数1,逻辑读41956次,物理读0次,预读1287次。 select top 10000 gid,fariqi,reader,title from tgongwen order by gid desc 用时:4736毫秒。扫描计数1,逻辑读55350次,物理读10次,预读775次。 select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi asc 用时:173毫秒。扫描计数1,逻辑读290次,物理读0次,预读0次。 select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi desc 用时:156毫秒。扫描计数1,逻辑读289次,物理读0次,预读0次。 从以上我们可以看出,不排序的速度以及逻辑读次数都是和order by聚集索引列的速度是相当的,但这些都比order by非聚集索引列的查询速度是快得多的。 同时,按照某个字段进行排序的时候,无论是正序还是倒序,速度是基本相当的。 12、高效的TOP 事实上,在查询和提取超大容量的数据集时,影响数据库响应时间的最大因素不是数据查找,而是物理的I/0操作。如: select top 10*from( select top 10000 gid,fariqi,title from tgongwen where neibuyonghu=办公室 order by gid desc)as a order by gid asc 这条语句,从理论上讲,整条语句的执行时间应该比子句的执行时间长,但事实相反。因为,子句执行后返回的是10000条记录,而整条语句仅返回10条语句,所以影响数据库响应时间最大的因素是物理I/O操作。而限制物理I/O操作此处的最有效方法之一就是使用TOP关键词了。TOP关键词是SQL SERVER中经过系统优化过的一个用来提取前几条或前几个百分比数据的词。经笔者在实践中的应用,发现TOP确实很好用,效率也很高。但这个词在另外一个大型数据库ORACLE中却没有,这不能说不是一个遗憾,虽然在ORACLE中可以用其他方法(如:rownumber)来解决。在以后的关于实现千万级数据的分页显示存储过程的讨论中,我们就将用到TOP这个关键词。 到此为止,我们上面

文档评论(0)

1亿VIP精品文档

相关文档