在表被删除大量数据后查询变慢的解决方法

本文介绍了如何解决数据库查询缓慢的问题,特别是在查询近期记录时的速度问题。通过分析发现,索引碎片是导致查询效率下降的主要原因。文章提供了几种优化索引的方法,包括重建索引和重新组织索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在维护一个数据库,其中有个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


3、ALTER INDEX 索引名 REBUILD          重新生成索引。
重新生成索引将会删除并重新创建索引。这将根据指定的或现有的填充因子设置压缩页来删除碎片、回收磁盘空间,然后对连续页中的索引行重新排序。该方法在一个事务中完成操作,在数据文件中需要有足够的free space来满足将所有的索引及相关的一些对象进行重建,否则操作可能失败,或者是重建的不十分彻底。对于数据量非常大的表,所需的free space也更多,应当特别注意这一点。

、 ALTER INDEX 索引名 REORGANIZE          重组索引。
使用最少系统资源重新组织索引 , 重新组织还会压缩索引页。可以在数据库 online 的情况下执行,但是整理不够彻底。

 

 

自己总结了下,如果以后发现查询速度慢

1、看下是否SQL语句和表关联的问题;

2、查询下条件字段是否建立索引;

3、有索引的字段,重建下索引;

4、如果还是无法解决,就使用SQL执行计划分析,看下哪里位置占用时间比较多后再查找解决办法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值