參考資料:
參考視頻
參考博客
分區的復雜操作
參考資料
概述:
- 這里只講實操,不講原理,看原理請看參考資料
- 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';
?
更多復雜操作參考博客?