日期:2014-05-17  浏览次数:20346 次

sql2008 一个表有二千多万行数据,求数据优化
公司系统用的数据库是SQL2008,听说之前一个表的数据只有几百万的时候查询速度是非常快的,但到了今年11
月的时候这个表的数据已经有了二千多万行了,查询速度变的非常慢。
当然这个表的索引肯定是有的,偶尔也会做做DBCC dBReIndex
可能是SQL当一个表的数据行达到了千万级别时,查询速度受影响非常大吧
 除了删除或转移部分表的数据外还有其它方法,还有其它方面优化来提高查询速度没?
 求建议!!!!!!!!
  
------解决方案--------------------
可以按照日期字段,进行分区,比如一个月一个分区。

另外:听说之前一个表的数据只有几百万的时候查询速度是非常快的

能把你的查询语句,贴出来看看不,看这个语句的特征,从语句的级别能不能优化
------解决方案--------------------
2000万不算大,如果你全表扫描,那当然越来越慢,具体看你的语句
------解决方案--------------------
這個是要看你sql語句吧?
------解决方案--------------------
我原来的公司,一个主要的业务表有超过1.5亿条记录,但是每次查询,做报表,基本上只会用到600-700w条数据,不会用整个表的所有数据。

所以建立了一个索引,速度非常快,而且还与其他的千万级别的大表进行关联,计算,基本上10秒内就能返回结果
------解决方案--------------------
引用:
Quote: 引用:

分区的重点在数据可管理、可维护性上,非性能上,别被误导
性能问题只能实事求是,实际诊断和分析,才会有客观的改进方式和方法

呵呵,谢谢各们提出宝贵意见,我就一个新手应该多多学习。。。
可能原因是从表的索引经常乱吧。。。。刚才用了十几分钟对从表做了DbReIndex,
发现速度有明显提升。


那就可能是索引的碎片,或者是统计信息的不准确导致的。
------解决方案--------------------
执行计划才能看出问题在哪里,我预估要么是进行了扫描,要么用了低效的JOIN算法,要么就是WHERE条件不够高效,如果你不贴执行计划,估计把问题会延长很久...很久...很久,然后就....没有然后了
------解决方案--------------------
两个表进行关联的时候,建议先用条件分别作用于各个表,然后再将结果进行关联,这样速度比较快,个人觉得单张表2000W数据不算大,是一个合理的范围,如果超过千万级,到上亿级就需要考虑分区表,我们现在项目有个库里各张表的数据都是千万级的。
------解决方案--------------------
2000万就要分区,
那让我们这些 5000万~上亿条的数据怎么办!
先不用分区,分析其他原因。


你说 用主表的时间字段做为条件,那查询出来的结果有多少条呢?
------解决方案--------------------
2000W真不算多。还是着手查询优化吧。
------解决方案--------------------
标志下                    .