Mysql分区表

发布于 2023-05-16  363 次阅读


目标:什么是分区表,怎么分区

什么是分区表

分区表是一种将单个表的数据分布到多个子表(分区)中的方法。每个分区可以单独存储在文件系统中,可以单独备份和恢复,可以单独优化,甚至可以放在不同的硬盘上。在查询 数据时,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')
);

总结

  1. 分区表可以优化单节点容量、增强分区之间的隔离
  2. 第一次访问需要打开所有的ibd文件,数量越多,操作系统会越卡,可能会达到打开文件的上限
  3. 可以通过存储在不同的硬盘上提高容量
届ける言葉を今は育ててる
最后更新于 2023-05-16