MySQL `count(*)` 查詢耗時過長,如何優化?

MySQL `count(*)` 查詢耗時過長,如何優化?

mysql 執行 count(*) 語句導致查詢時間過長

問題描述

執行以下 sql 語句:

select count(*) from `t_order_old`

處理 29 萬條數據需要 13.96 秒,詢問是否這種執行效率正常。

解決方案

頻繁使用 count(*) 函數可能會影響查詢性能,尤其是在處理大量數據時。建議采用以下解決方案:

  • 存儲統計信息:將需要統計的結果單獨存儲在數據庫中,并在更新操作時同步維護這些統計數據。
  • 使用 mysql 觸發器:創建 mysql 觸發器,以便在更新數據表時自動維護統計信息。此方法減少了編寫代碼的需要,并且可以在業務邏輯復雜時提供便利。

示例

假設要統計文章的回復數量。可以使用以下方法:

-- 創建一個額外的字段來存儲回復數量 ALTER TABLE articles ADD COLUMN reply_count INT NOT NULL DEFAULT 0;  -- 創建一個觸發器來在更新文章時維護回復數量 CREATE TRIGGER update_reply_count AFTER UPDATE ON articles FOR EACH ROW BEGIN   -- 通過子查詢計算回復數量   UPDATE articles SET reply_count = (SELECT COUNT(*) FROM replies WHERE article_id = NEW.id)   WHERE id = NEW.id; END;

這樣,獲取文章的回復數量將變得更加高效,無需每次都執行 count(*) 查詢。

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享