目标:什么是分区表,怎么分区
什么是分区表
分区表是一种将单个表的数据分布到多个子表(分区)中的方法。每个分区可以单独存储在文件系统中,可以单独备份和恢复,可以单独优化,甚至可以放在不同的硬盘上。在查询 数据时,MySQL 只需要访问包含所需数据的分区,从而提高查询效率。
请注意,分区表并不总是提高性能,而且它会增加数据库的复杂性。在决定使用分区表之前,你需要充分考虑你的数据量、查询模式和硬件环境。
- 将INNODB的一个表分成多个表
- Server层依然当做是一个整体的表
范围分区表
例如,你可以根据日期字段将数据分配到不同的分区,其中每个分区包含一个特定的日期范围的数据。
- DATA DIRECTORY = /data1:数据目录
- INDEX DIRECTORY = /data2:索引目录
-- 范围分区
CREATE TABLE orders (
id INT NOT NULL,
order_date DATE NOT NULL
)
PARTITION BY RANGE( YEAR(order_date) ) (
PARTITION p0 VALUES LESS THAN (1990),
PARTITION p1 VALUES LESS THAN (2000),
PARTITION p2 VALUES LESS THAN (2010),
PARTITION p3 VALUES LESS THAN (2020),
PARTITION p4 VALUES LESS THAN MAXVALUE
);
Hash分区
这种类型的分区基于某个列的哈希值来进行。哈希分区可以将数据均匀地分布到多个分区,这对于负载均衡特别有用。
-- Hash分区
CREATE TABLE orders (
id INT NOT NULL,
order_date DATE NOT NULL
)
PARTITION BY HASH( MONTH(order_date) )
PARTITIONS 12;
列表分区
这种类型的分区基于某个列的离散值来进行。你可以为每个分区指定一个或多个值,当插入一条新的记录时,MySQL会将其存储在包含其列值的分区。
-- Hash分区
CREATE TABLE employees (
id INT NOT NULL,
city VARCHAR(50)
)
PARTITION BY LIST (city) (
PARTITION p0 VALUES IN ('New York', 'Boston'),
PARTITION p1 VALUES IN ('San Francisco', 'Los Angeles'),
PARTITION p2 VALUES IN ('Chicago', 'Houston')
);
总结
- 分区表可以优化单节点容量、增强分区之间的隔离
- 第一次访问需要打开所有的ibd文件,数量越多,操作系统会越卡,可能会达到打开文件的上限
- 可以通过存储在不同的硬盘上提高容量
Comments 1 条评论