大數據表查詢優化 - 表分區

快兩年沒寫過業務代碼了……
今天幫一個研發團隊優化了一下數據庫表的查詢性能。使用的是表分區。
簡單記錄了一下步驟,方便直接用:

  1. 使用 Trade_Date 新建表分區,從 4 月建立到 2021-6,每月一個單獨的分區:

    ALTER TABLE tbl_original_data 
    PARTITION BY RANGE(unix_timestamp(Trade_Date))(
      partition p0 values less than (unix_timestamp('2020-05-01 00:00:00')),
      partition p1 values less than (unix_timestamp('2020-06-01 00:00:00')),
      partition p2 values less than (unix_timestamp('2020-07-01 00:00:00')),
      partition p3 values less than (unix_timestamp('2020-08-01 00:00:00')),
      partition p4 values less than (unix_timestamp('2020-09-01 00:00:00')),
      partition p5 values less than (unix_timestamp('2020-10-01 00:00:00')),
      partition p6 values less than (unix_timestamp('2020-11-01 00:00:00')),
      partition p7 values less than (unix_timestamp('2020-12-01 00:00:00')),
      partition p8 values less than (unix_timestamp('2021-01-01 00:00:00')),
      partition p9 values less than (unix_timestamp('2021-02-01 00:00:00')),
      partition p10 values less than (unix_timestamp('2021-03-01 00:00:00')),
      partition p11 values less than (unix_timestamp('2021-04-01 00:00:00')),
      partition p12 values less than (unix_timestamp('2021-05-01 00:00:00')),
      partition p13 values less than (unix_timestamp('2021-06-01 00:00:00')),
      partition p14 values less than (unix_timestamp('2021-07-01 00:00:00'))
    );
    
  2. 到明年6月以後,使用以下語句添加新分區:

    ALTER TABLE tbl_original_data
    ADD PARTITION (PARTITION p15 values less than (unix_timestamp('2021-08-01 00:00:00')))
    
  3. 因爲現有查詢已經帶上 Trade_Date 字段條件,所以不用修改查詢和程序。

參考文章:
MySQL數據庫表分區功能詳解
MySQL對數據表已有表進行分區表
Mysql 分區表-分區操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章