表數據越來越多,查詢越來越慢怎么辦?


 
前提是已經考慮了索引的問題,但因為數據量大導致表的增刪改查還是很慢
 
 
解決方案建議
  1. 歷史數據歸檔
  2. 數據分表
 
 
一. 歷史數據歸檔
 
1.1 方案
  1. 根據時間范圍查找需要刪除的數據
  2. 如果主鍵是有序的,可以根據時間范圍查找到臨界主鍵進行刪除
  3. 創建臨時表,遷移數據(已歸檔數據不遷移),再修改臨時表為原表(需要停機)
-- 新建一個臨時訂單表
create table orders_temp like orders;
 
-- 把當前訂單復制到臨時訂單表中
insert into orders_temp
  select * from orders
  where timestamp >= SUBDATE(CURDATE(),INTERVAL 1 month);
 
-- 修改替換表名
rename table orders to orders_old
rename table orders_temp to orders
 
-- 刪除舊表
drop table orders_temp

  

1.2 優點
  1. 對系統改動小,改造成本低
  2. 可根據數據量制定歸檔周期
 
1.3 缺點
  1. 歷史歸檔數據屬於冷數據,需要單獨查詢
  2. 需要開發自動歸檔程序,並比對歸檔前后數據正確性
 
1.4 擴展
  1. 刪除歸檔數據時,應分批刪除,減少對數據庫的壓力
  2. 數據刪除僅做標記,不做實際刪除,會導致磁盤碎片。但掃描數據時,只會掃描未刪除的數據,減少掃描數據量,提高速度。
 
二. 數據分表
 
2.1 優點
1. 預估好數據量,計划好分表數的前提下,可支撐大量數據
2. 使用適合的中間件對業務無侵入
 
2.2 缺點
1. 存在冷熱數據不均的情況,熱表還是會有大數據問題
2. 需要研究中間件或自行開發,否則對業務侵入較大
3. 歷史數據按時間分表無需遷移數據,按其它分片鍵分表需遷移數據
 
2.3 擴展
1. 分表后的數據跨表整合需要中間件支持或自行開發


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM