WEEK 関数を使用して、週の曜日ごとにテーブルシャードにデータを分散させます。各シャードは月曜日(シャード 0)から日曜日(シャード 6)までのいずれかの曜日にマップされます。
制限事項
パーティションキーは、DATE、DATETIME、または TIMESTAMP 型である必要があります。
WEEK はテーブルシャードにのみ適用されます。データベースシャードには使用できません。
各データベースシャードには、週の曜日ごとに最大 7 つのテーブルシャードを設定できます。
PolarDB-X 1.0 のバージョン 5.1.28-1320920 以降が必要です。
仕組み
WEEK はパーティションキーから曜日の値を抽出し、それをテーブルシャードの添字として使用します。
| 曜日 | テーブルシャード添字 |
|---|---|
| 月曜日 | 0 |
| 火曜日 | 1 |
| 水曜日 | 2 |
| 木曜日 | 3 |
| 金曜日 | 4 |
| 土曜日 | 5 |
| 日曜日 | 6 |
ユースケース
WEEK は、データアクセスパターンが週単位のサイクルに従うワークロードに適しています。アプリケーションが曜日単位でデータを生成・照会する場合、WEEK を使用すると、各物理テーブルシャードが特定の曜日と対応付けられるため、単一の曜日のデータに対するクエリは正確に 1 つのシャードにヒットします。
例
次の Data Definition Language (DDL) 文は、name 列に対して HASH を使用してデータベースシャードに、create_time 列に対して WEEK を使用して 7 つのテーブルシャードにデータをパーティションするテーブルを作成します。
CREATE TABLE test_week_tb (
id int,
name varchar(30) DEFAULT NULL,
create_time datetime DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
dbpartition by HASH(name)
tbpartition by WEEK(create_time) tbpartitions 7;dbpartition by HASH(name)—name列の値をハッシュ化して、行をデータベースシャードに分散させます。tbpartition by WEEK(create_time) tbpartitions 7—create_timeから導出される曜日に基づき、行を 7 つのテーブルシャードに分散させます。