服务器软/硬件配置如下:
CPU:四路至强 2.0G;
内存:8G;
操作系统:Windows Server 2003 SP2;
数据库:SQL Server 2005 SP2;
某个库中有一个论坛主帖表,每天增加数千的数据,现在整个表的数据量已经是百万级。由于论坛不断升级,增加了N个字段,为了实现良好的扩展性,将某些字段移到了一个子表中,而子表中的某个字段又是外键关联另一个表。没有添加任何非聚集索引。
当使用top查询N条数据的时候,就算三个表之间进行关联查询,由于服务器性能出众和SQL Server 2005对大数据量的处理能力的提升,查询时间都能在个位数下;但当需要进行分页查询的时候(使用select …where id not in (selet …) 的方式),竟然数十秒甚至几分钟都完成不了查询。
分析一下有什么地方可以优化的:
1、 以前是两个表,一个表是百万级数据,另一个表只有几条固定的数据;现在是两个百万级的数据表,再加上一个只有几条固定数据的表,两个百万级别的表进行关联查询,性能肯定有影响。
2、 无论是两个表还是三个表,表与表之间的关联是写在视图里的,是否可以创建索引视图进行优化?
3、 查询的时候大多数会加入两个以上的字段进行条件查询,亦会加入一到两个的字段进行排序,在这些字段上创建单独或复合的非聚集索引应该可以得到较大的性能提升。
4、 查询语句是否导致了全表扫描?
结果:
1、 将作为条件查询的字段放在主表里,子表只放一些基本上不会作为条件查询的字段,从而可以使三个表关联查询的情况只发生于查询单条数据。
2、 这个查询所使用的视图并没有指定查询条件,因此索引视图无用武之地
3、 因为由于需求的原因,经常使用的数据占了表数据量的90%左右,经测试,对这些字段添加非聚集索引对性能提升影响不大;而对两个常用的排序字段(创建时间,最后更新时间)分别添加单独的索引,并对这两个字段添加复合索引,对性能的提高的影响是非常大的。
4、 经过分析,这个查询中不存在全表扫描。
经过以上优化,直接在数据库执行对论坛帖子查询的存储过程(整个系统对数据库的操作大部分都是使用存储过程),无论是查询top N条数据,还是进行每页50-200条的分页查询,经肉眼观察都在1秒内完成。至于具体详细的查询时间,并没有用SQL Profiler监测。优化后,就算执行千万级的查询,查询也不会太费劲。
分享到:
相关推荐
Oracle 大数据量操作优化.pdf
百万数据级快速查询优化技巧,数据库快速查询所遵循的方法。
Oracle 分区技术及大数据量操作性能优化.ppt
我的系统为:每天新增一张表,每张表的数据量为1000万条记。一共有十个字段,有四个字段需要排序,每个字段都可能出现在查询条件中,每次查询所有的字段必须都查询出来,可以查询三天之内的数据,没有和其他表的连接...
针对大数据量操作性能降低的情况,本文提出了Oracle针对大数据量的操作优化。
2) 对大数据量查询时,慎用list()或者iterator()返回查询结果, 3) 对于关联操作,Hibernate虽然可以表达复杂的数据关系 4) 对含有关联的PO(持久化对象)时 5) 在一对多、多对一的关系中,使用延迟加载机制,
Oracle大数据量操作优化
针对银行大数据量(过亿)条数据的查询优化处理
全部都是经验积累所整理的文档,对提高查询有很大帮助
MySQL大数据量分页查询方法及其优化
NULL 博文链接:https://jiangyongyuan.iteye.com/blog/1574637
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id ...
大数据量+高并发的数据库SQL优化
sql优化,大数据量如何解决.docx
Oracle查询的优化技巧,对大数据量查询的时候可以节省不少时间。
大数据量高并发的数据库优化,一定对你有帮助的。
大数据量数据整合与查询性能优化(DB2V9& AIXV5.3)v1.2 - 副本.pdf
Java向数据库中插入大量数据时的优化
实际项目中因表数据量大,发现查询速度很慢。记录此次排查和优化过程。希望对阅读到此文章的朋友有所帮助。