パーティション化されたテーブルの作成
このステップでは、MySQL でデータベースとパーティション化されたテーブルを作成します。パーティショニングは、指定されたルールに基づいてテーブルをより小さく管理しやすい部分に分割することで、大規模なデータセットの管理に役立ちます。これにより、特にパーティショニングキーに基づいてデータをフィルタリングするクエリのパフォーマンスが大幅に向上する可能性があります。
まず、LabEx VM でターミナルを開きます。すでに ~/project ディレクトリにいるはずです。
root ユーザーとして MySQL サーバーに接続します(実験の開始時に一度だけ実行してください)。
sudo mysql -u root
これで MySQL シェルに入りました。実験が終了するまで、以降のすべての SQL コマンドはこのセッションで実行してください。
テーブルを格納するために sales_data という名前のデータベースを作成しましょう。
CREATE DATABASE sales_data;
新しく作成されたデータベースに切り替えます。
USE sales_data;
次に、sales という名前のテーブルを作成し、sale_date 列の年でパーティション化します。2020 年、2021 年、2022 年、2023 年のパーティションと、将来の日付のための包括的なパーティションを作成します。
CREATE TABLE sales (
sale_id INT NOT NULL,
sale_date DATE NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
PRIMARY KEY (sale_id, sale_date)
)
PARTITION BY RANGE (YEAR(sale_date)) (
PARTITION p2020 VALUES LESS THAN (2021),
PARTITION p2021 VALUES LESS THAN (2022),
PARTITION p2022 VALUES LESS THAN (2023),
PARTITION p2023 VALUES LESS THAN (2024),
PARTITION pFuture VALUES LESS THAN MAXVALUE
);
PARTITION BY RANGE 句について理解しましょう。
PARTITION BY RANGE (YEAR(sale_date)): これは、テーブルが sale_date 列に適用された YEAR() 関数の戻り値の範囲に基づいてパーティション化されることを指定します。
PARTITION p2020 VALUES LESS THAN (2021): これは p2020 という名前のパーティションを作成します。sale_date の年が 2021 未満(つまり 2020 年)の行はすべて、このパーティションに格納されます。
PARTITION p2021 VALUES LESS THAN (2022): これは 2021 年のデータのために p2021 という名前のパーティションを作成します。
PARTITION p2022 VALUES LESS THAN (2023): これは 2022 年のデータのために p2022 という名前のパーティションを作成します。
PARTITION p2023 VALUES LESS THAN (2024): これは 2023 年のデータのために p2023 という名前のパーティションを作成します。
PARTITION pFuture VALUES LESS THAN MAXVALUE: これは pFuture という名前のパーティションを作成し、sale_date の年が 2024 年以上であるすべてのデータを格納します。MAXVALUE は、他のどの値よりも常に大きい特別な値です。
CREATE TABLE ステートメントを実行した後、次のコマンドを使用してテーブル構造とそのパーティションを確認できます。
SHOW CREATE TABLE sales;
出力で PARTITION BY RANGE 句を探して、テーブルが指定されたパーティションで作成されたことを確認してください。
次に、sales テーブルにサンプルデータを挿入しましょう。MySQL は sale_date に基づいて各行を自動的に正しいパーティションに配置します。
INSERT INTO sales (sale_id, sale_date, amount) VALUES
(1, '2020-12-31', 100.00),
(2, '2021-01-15', 150.00),
(3, '2021-12-25', 200.00),
(4, '2022-06-01', 120.00),
(5, '2022-12-31', 180.00),
(6, '2023-03-10', 250.00),
(7, '2023-09-20', 300.00),
(8, '2024-01-01', 350.00);
パーティション化されたテーブルを正常に作成し、データを挿入しました。次のステップでは、特定のパーティションからデータをクエリする方法を学びます。