MySQL分区表(理论+实战)

本文深入探讨MySQL的RANGE时间分区,通过实战案例展示如何创建时间分区表并优化查询效率。通过对比普通表和分区表的执行计划,强调分区在减少全表扫描方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考

https://dev.mysql.com/doc/refman/5.7/en/create-table.html#create-table-partitioning

 

分类

1.HASH

哈希一个或多个列,以创建用于放置和定位行的键。expr是一个使用一个或多个表列的表达式。这可以是任何有效的MySQL表达式(包括MySQL函数),生成一个整数值。例如,它们都是使用分区BY散列的有效CREATE TABLE语句

CREATE TABLE t1 (col1 INT, col2 CHAR(5))
    PARTITION BY HASH(col1);

CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATETIME)
    PARTITION BY HASH ( YEAR(col3) );

2.KEY

这类似于散列,只是MySQL提供了散列函数,以保证数据的均匀分布。column_list参数只是一个包含1个或多个表列的列表(最多16个)。这个例子展示了一个简单的按键分区的表,有4个分区

CREATE TABLE tk (col1 INT, col2 CHAR(5), col3 DATE)
    PARTITION BY KEY(col3)
    PARTITIONS 4;

3.RANGE

在本例中,expr使用一组小于操作符的值显示一个值范围。在使用范围分区时,必须使用小于的值定义至少一个分区。不能在范围分区中使用值

CREATE TABLE t1 (
    year_col  INT,
    some_data INT
)
PARTITION BY RANGE (year_col) (
    PARTITION p0 VALUES LESS THAN (1991),
    PARTITION p1 VALUES LESS THAN (1995),
    PARTITION p2 VALUES LESS THAN (1999),
    PARTITION p3 VALUES LESS THAN (2002),
    PARTITION p4 VALUES LESS THAN (2006),
    PARTITION p5 VALUES LESS THAN MAXVALUE
);

4.LIST

这在根据表列(可能的值的限制集,例如州或国家代码)分配分区时非常有用。在这种情况下,可以将属于某个州或国家的所有行分配给单个分区,或者为某个州或国家集保留一个分区。它与RANGE类似,只是可以使用IN中的值为每个分区指定允许的值。值IN与要匹配的值列表一起使用。例如,你可以创建一个分区方案如下


                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值