mysql 統計近 30 萬條數據時間過長?
當需要統計大量數據時,例如這里提到的二十九萬條數據,mysql 的執行速度似乎令人擔憂,直接使用 count(*) 查詢需要 13 秒多。對于這種數量級的數據,這個時間開銷是否正常呢?
可能的優化方案
- 避免使用 count(*): count(*) 對整個表進行全表掃描,對于大表來說代價比較高。建議將其替換為條件查詢或索引掃描。
- 維護統計數據: 不要在每次查詢時都統計,可以考慮通過觸發器或其他機制在數據更新時自動維護統計數據。
- 利用觸發器: mysql 支持使用觸發器來在事件發生時自動執行任務,可以在數據更新時自動更新統計數據,避免手動維護。
具體實現
以下是一個使用觸發器維護統計數據的示例:
CREATE TRIGGER `trigger_t_order` AFTER INSERT ON `t_order_old` FOR EACH ROW BEGIN -- 更新統計數據 UPDATE `t_order_stats` SET `count` = `count` + 1 WHERE `order_id` = NEW.`order_id`; END
登錄后復制
通過這樣的方法,可以使用戶在需要時快速獲取統計數據,而無需每次都對大量數據進行掃描。