参考资料:
参考视频
参考博客
分区的复杂操作
参考资料
概述:
- 这里只讲实操,不讲原理,看原理请看参考资料
- Mysql自5.1后支持分区,在Mysql8之后只有InnoDB支持分区,Mysiam不支持分区
- 本例只是一个简单的说明,分区有很多特点和复杂的操作
分区步骤:
分区依据一定要参与到索引中,执行如下SQL
CREATE TABLE orders (order_id INT NOT NULL AUTO_INCREMENT,order_date DATE,customer_id INT,total_amount DECIMAL(10, 2),PRIMARY KEY (order_id, order_date)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='这是一个分区表,按月份分区'
PARTITION BY RANGE (YEAR(order_date)) (PARTITION p0 VALUES LESS THAN (2020),PARTITION p1 VALUES LESS THAN (2021),PARTITION p2 VALUES LESS THAN (2022),PARTITION p3 VALUES LESS THAN MAXVALUE
);
- 上述语句创建了4个分区:
- order_date 在2020年是一个分区
- order_date 在2021年是一个分区
- order_date 在2022年是一个分区
- order_date 大于2020年是一个分区
插入数据
INSERT INTO orders (order_date, customer_id, total_amount) VALUES('2021-01-01', 1001, 50.00),('2021-02-15', 1002, 100.00),('2022-03-10', 1003, 200.00);
执行查询
SELECT * FROM orders WHERE order_date >= '2021-01-01' AND order_date < '2022-01-01';
查看执行计划
EXPLAIN SELECT * FROM orders WHERE order_date >= '2021-01-01' AND order_date < '2022-01-01';
可以看到,数据只是从第二个分区(p2)查询出来
查询分区信息
SELECT * FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'orders';
更多复杂操作参考博客