PolarDB-X 1.0是一個(gè)支持既分庫又分表的數(shù)據(jù)庫服務(wù)。本文將介紹PolarDB-X 1.0拆分函數(shù)的相關(guān)信息。

拆分方式

PolarDB-X 1.0中,一張邏輯表的拆分方式由拆分函數(shù)(包括分片數(shù)目與路由算法)與拆分鍵(包括拆分鍵的 MySQL 數(shù)據(jù)類型)共同定義。只有當(dāng)PolarDB-X 1.0使用了相同的拆分函數(shù)和拆分鍵時(shí),才會被認(rèn)為分庫與分表使用了相同的拆分方式。相同的拆分方式讓PolarDB-X 1.0可以根據(jù)拆分鍵的值定位到唯一的物理分庫和物理分表。當(dāng)一張邏輯表的分庫拆分方式與分表拆分方式不一致時(shí),若SQL查詢沒有同時(shí)帶上分庫條件與分表?xiàng)l件,則PolarDB-X 1.0在查詢過程會進(jìn)行全分庫掃描或全分表掃描操作。

拆分函數(shù)對分庫、分表的支持情況

拆分函數(shù) 說明 是否支持用于分庫 是否支持用于分表
HASH 簡單取模
STR_HASH 截取字符串子串
UNI_HASH 簡單取模
RIGHT_SHIFT 數(shù)值向右移
RANGE_HASH 雙拆分列哈希
MM 按月份哈希
DD 按日期哈希
WEEK 按周哈希
MMDD 按月日哈希
YYYYMM 按年月哈希
YYYYWEEK 按年周哈希
YYYYDD 按年日哈希

拆分函數(shù)對全局二級索引的支持情況

  • PolarDB-X 1.0支持全局二級索引,從數(shù)據(jù)存儲的角度看,每個(gè)GSI對應(yīng)一張用于保存索引數(shù)據(jù)的邏輯表,稱為索引表。
  • PolarDB-X 1.0還支持創(chuàng)建GSI時(shí)指定索引表的拆分方式,并且對拆分函數(shù)的支持范圍與普通邏輯表相同。創(chuàng)建GSI的詳細(xì)語法,請參見使用全局二級索引

拆分函數(shù)對數(shù)據(jù)類型支持情況

拆分函數(shù) 數(shù)據(jù)類型
INT BIGINT MEDIUMINT SMALLINT TINYINT VARCHAR CHAR DATE DATETIME TIMESTAMP 其他類型
HASH × × × ×
UNI_HASH × × × ×
RANGE_HASH × × × ×
RIGHT_SHIFT × × × × × ×
STR_HASH × × × × × × × × ×
MM × × × × × × × ×
DD × × × × × × × ×
WEEK × × × × × × × ×
MMDD × × × × × × × ×
YYYYMM × × × × × × × ×
YYYYWEEK × × × × × × × ×
YYYYDD × × × × × × × ×

拆分函數(shù)的語法說明

PolarDB-X 1.0兼容MySQL的DDL表操作語法,并添加了drds_partition_options的分庫分表關(guān)鍵字,具體操作語法如下所示:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [drds_partition_options]
    [partition_options]

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(create_definition,...)]
    [table_options]
    [drds_partition_options]
    [partition_options]
    select_statement

drds_partition_options:
    DBPARTITION BY
        { {HASH|YYYYMM|YYYYWEEK|YYYYDD|...}([column])}
        [TBPARTITION BY
            { {HASH|MM|DD|WEEK|MMDD|YYYYMM|YYYYWEEK|YYYYDD|...}(column)}
          [TBPARTITIONS num]
        ]