创建分区表
在此步骤中,我们将在 MySQL 中创建一个数据库和一个分区表。分区通过根据指定规则将表划分为更小、更易于管理的部分来帮助管理大型数据集。这可以显著提高查询性能,特别是对于基于分区键过滤数据的查询。
首先,在 LabEx VM 中打开一个终端。你应该已经位于 ~/project 目录中。
以 root 用户连接到 MySQL 服务器(此操作在本实验开始时仅执行一次):
sudo mysql -u root
你现在已进入 MySQL shell。在完成本实验之前,所有后续 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): 这创建了一个名为 p2021 的分区,用于存储 2021 年的数据。
PARTITION p2022 VALUES LESS THAN (2023): 这创建了一个名为 p2022 的分区,用于存储 2022 年的数据。
PARTITION p2023 VALUES LESS THAN (2024): 这创建了一个名为 p2023 的分区,用于存储 2023 年的数据。
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);
你已成功创建了一个分区表并向其中插入了数据。在下一步中,我们将学习如何从特定分区查询数据。