SQL查询性能异常求助:插入2021年数据后特定查询缓慢
解决2021年数据查询缓慢的问题
1. 检查并创建合适的索引
先确认mov_table是否存在针对type和year的复合索引,执行对应命令查看现有索引:
- SQL Server:
EXEC sp_helpindex mov_table - MySQL:
SHOW INDEX FROM mov_table
如果没有覆盖这两个字段的索引,创建复合索引(若需要返回所有列,用INCLUDE避免键查找,提升性能):
-- SQL Server CREATE NONCLUSTERED INDEX IX_mov_table_TypeYear ON mov_table (type, year) INCLUDE (col1, col2, ...); -- 替换为实际需要返回的列,若必须用SELECT *可省略INCLUDE -- MySQL CREATE INDEX IX_mov_table_TypeYear ON mov_table (type, year);
2. 更新数据库统计信息
新插入大量2021年数据后,数据库统计信息可能过时,导致查询优化器生成低效执行计划。执行命令更新统计信息:
- SQL Server:
UPDATE STATISTICS mov_table - MySQL:
ANALYZE TABLE mov_table
3. 修复索引碎片
大量插入数据易造成索引碎片,拖慢查询速度。根据碎片程度选择操作:
- 重建索引(碎片率>30%时推荐):
-- SQL Server ALTER INDEX ALL ON mov_table REBUILD; -- MySQL(针对InnoDB表) ALTER TABLE mov_table ENGINE=InnoDB; - 重组索引(碎片率5%-30%时推荐):
-- SQL Server ALTER INDEX ALL ON mov_table REORGANIZE;
4. 验证执行计划
若以上操作后问题仍存在,查看查询执行计划,确认是否使用了正确的索引。比如SQL Server中按Ctrl+M执行查询,检查是否存在表扫描操作,再针对性调整索引。
内容的提问来源于stack exchange,提问作者Felipe Gabriel
相关产品推荐
相关产品推荐

