统计29万条数据耗时13秒,是否合理?
问题:
执行如下sql查询时,耗时13秒,查询29万条数据。
select count(*) from `t_order_old`
登录后复制
解答:
直接使用count(*)统计数据可能会导致性能问题。尤其是在数据量较大时,每次查询都需要遍历所有数据进行统计。
优化建议:
避免使用count(*),转而将需要的统计结果单独存储。
- 使用触发器:
在更新数据时自动更新统计数据。 - 自行维护统计数据:
在业务逻辑中同步维护统计数据。
示例:
以文章回复数量为例,可以使用如下方式统计:
-- 主表 CREATE TABLE `t_article` ( `article_id` INT NOT NULL AUTO_INCREMENT, `reply_count` INT NOT NULL DEFAULT 0, PRIMARY KEY (`article_id`) ); -- 触发器:更新回复数量 CREATE TRIGGER `tr_article_update_reply_count` AFTER UPDATE ON `t_reply` FOR EACH ROW BEGIN UPDATE `t_article` SET `reply_count` = `reply_count` + NEW.`status` - OLD.`status` WHERE `article_id` = NEW.`article_id`; END;
登录后复制
这样,每次更新回复数据时,文章的回复数量会自动更新,从而避免使用count(*)频繁统计。