对于30万条数据的统计查询耗时13秒,这个性能表现不正常。在合理配置和优化的MySQL环境下,30万条数据的统计查询通常应该在毫秒级或最多几秒内完成。
-- 为统计字段添加索引
ALTER TABLE your_table ADD INDEX idx_stat_field(stat_field);
-- 如果是多字段统计,考虑复合索引
ALTER TABLE your_table ADD INDEX idx_stat_fields(field1, field2);
-- 原始可能低效的写法
SELECT COUNT(*) FROM large_table WHERE create_time > '2023-01-01';
-- 优化写法(如果只是统计数量)
SELECT COUNT(id) FROM large_table WHERE create_time > '2023-01-01';
-- 使用覆盖索引
SELECT COUNT(*) FROM large_table USE INDEX(idx_create_time) WHERE create_time > '2023-01-01';
检查并调整以下MySQL配置参数:
innodb_buffer_pool_size (建议设置为可用内存的70-80%)
innodb_log_file_size
query_cache_size (在MySQL 8.0中已移除)
tmp_table_size
max_heap_table_size
-- 使用EXPLAIN分析查询执行计划
EXPLAIN SELECT COUNT(*) FROM your_table WHERE condition;
-- 查看慢查询日志
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';
-- 查看当前运行进程
SHOW PROCESSLIST;
30万数据量在现代数据库系统中属于中等规模,通过合理优化应该能获得毫秒级响应。