全部產品
Search
文件中心

PolarDB:YYYYMM

更新時間:Jul 06, 2024

本文將介紹YYYYMM函數的使用方式。

使用限制

  • 拆分鍵的類型必須是DATE、DATETIME或TIMESTAMP中的一種。
  • 使用YYYYMM函數前,需要先確定所需的總物理分表數,您可以通過確定重複持續時間(如2年)來確定總的物理分表數。因為YYYYMM函數僅支援為重複持續時間內的每一個月建立一張獨立分表。
  • 當月份經過一個重複持續時間後(如2012-03經過一個2年的重複持續時間後是2014-03),相同月份有可能被路由到同一個分庫分表,具體被分到哪個分表受實際的分表數目影響。
  • PolarDB-X 1.0執行個體的版本需為5.1.28-1320920或以上版本,。

路由方式

根據拆分鍵時間值的年份與月份計算雜湊值,然後再按分庫數進行取餘,完成路由計算。

例如,YYYYMM('2012-12-31 12:12:12')函數等價於按照(2012x12+12)%D(D是分庫數目)公式計算出2012-12-31是2012年的第12個月。

使用情境

適合於需要按年份與月份進行分庫的情境,建議結合該函數與tbpartition by YYYYMM(ShardKey)一起使用。

使用樣本

假設PolarDB-X 1.0裡已經擁有8個物理庫,現有如下需求:

  • 按年月進行分庫。
  • 同一個月的資料都能落在同一張分表,且兩年以內的每一個月都能單獨對應一張分表。
  • 查詢時帶上分庫分表鍵後能直接將查詢落在某個物理分庫的某個物理分表。

YYYYMM分庫函數即可滿足上述要求。上述需求中提到兩年以內的每個月都需對應一張分表(即一個月一張表),由於一年有12個月,所以需要建立24(12x2=24)張物理分表才能滿足上述需求。PolarDB-X 1.0已有8個分庫,所以每個分庫應該建3(24/8=3)張物理分表。

則您可以使用如下建表DDL:

create table test_yyyymm_tb (    
        id int, 
        name varchar(30) DEFAULT NULL,  
    create_time datetime DEFAULT NULL,
    primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 
dbpartition by YYYYMM(create_time)
tbpartition by YYYYMM(create_time) tbpartitions 3;