統計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(*)頻繁統計。