萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 大表統計查詢優化:中間表策略實戰

問題背景

大表 counttable(千萬列)直接統計近 7 天消費總額耗時 3.95 秒,且影響線上業務。

中間表方案

  1. 建立中間表:僅保留統計所需欄位,結構精簡。
    CREATE TABLE tmp_count (
        cid VARCHAR(10),
        cust_count DECIMAL(16,2),
        cust_date DATE,
        cust_ip VARCHAR(20)
    ) ENGINE=InnoDB;
    
  2. 定期同步歷史資料(每日/每小時):
    INSERT INTO tmp_count
    SELECT id, custi, coutdate, custip
    FROM counttable
    WHERE coutdate < DATE_SUB(NOW(), INTERVAL 7 DAY);
    -- 1577 萬列約 6.67 秒
    
  3. 統計查詢改查中間表:
    SELECT SUM(cust_count) FROM tmp_count;
    -- 0.73 秒,提速 5.4 倍
    
  4. 靈活加索引:中間表可針對統計維度建立專用索引,不影響主表寫入效能。

優勢總結

  • 線上主表無長時間鎖定,業務零影響。
  • 中間表資料量小、索引精準,查詢極快。
  • 可隨時新增輔助欄位(如預聚合欄位)加速複雜報表。
  • 配合分區表或定時任務自動化維護。

進階:實時統計替代方案

  • 觸發器同步 → 寫入延遲極低,但增加寫入負擔。
  • 資料倉庫(ClickHouse/Doris/StarRocks)離線同步 → 複雜 OLAP 最佳選擇。
  • Redis 計數器 → 簡單計數場景,極高效能。
copyright © 萬盛學電腦網 all rights reserved