查询速度变慢和索引维护
在维护一个数据库,其中有个10W条的数据表,每天大概增加1000条左右的记录,今天查询了下发现应用提示查询超时,而且是查询近期的记录很慢,查询旧记录速度还行。检查下表关联时候速度还是很快的,加上个WHERE条件语句后速度就很慢了,要30秒,所以前台会提示连接超时。条件的字段我有加索引呀,为什么查询近期的记录会慢成这样;
我想应该是索引的问题,查了下资料,rebuild了下索引,问题解决;
资料地址:http://www.cnblogs.com/chenjunbiao/archive/2006/11/22/1760242.html;
原因:数据表在添加、更新、删除操作中会产生索引碎片,导致查询速度变慢,特别是查询大型数据表时更为明显,所以需要对某些重要的表进行定期索引扫描并针对合符要求的索引进行重组或重建工作。
1、Drop原来的索引再重建这些索引,这种方法的优点是索引彻底重建,达到最理想的状况。但是这此会阻塞所有的查询,最好是在索引碎片十分严重,并且使用REBUILD无法达到效果的情况下使用。注意:使用DROP_EXISTING子句,可以避免non-clustered index被重建两次。
2、ALTER INDEX ...... REORGANIZE重组索引。
使用最少系统资源重新组织索引,重新组织还会压缩索引页。可以在数据库online的情况下执行,但是整理不够彻底。
3、ALTER INDEX ...... REBUILD 重新生成索引。
重新生成索引将会删除并重新创建索引。这将根据指定的或现有的填充因子设置压缩页来删除碎片、回收磁盘空间,然后对连续页中的索引行重新排序。该方法在一个事务中完成操作,在数据文件中需要有足够的free space来满足将所有的索引及相关的一些对象进行重建,否则操作可能失败,或者是重建的不十分彻底。对于数据量非常大的表,所需的free space也更多,应当特别注意这一点。
自己总结了下,如果以后发现查询速度慢
1、看下是否SQL语句和表关联的问题;
2、查询下条件字段是否建立索引;
3、有索引的字段,重建下索引;
4、如果还是无法解决,就使用SQL执行计划分析,看下哪里位置占用时间比较多后再查找解决办法;(执行计划如何使用,还要学习!)