Партиционирование таблиц в MySQL — это разбиение большой таблицы на части по указанным критериям, что позволит ускорить чтение и запись в нее данных, если эта таблица содержит очень большое количество данных.
Приведу простой пример создания новой таблицы уже с партиционированием:
CREATE DATABASE ixnfo;
use ixnfo;
CREATE TABLE ixnfo (
id INT,
name VARCHAR(30),
date DATE) ENGINE = INNODB
PARTITION BY RANGE( YEAR(date) ) (
PARTITION p_old VALUES LESS THAN(2019),
PARTITION p_2019 VALUES LESS THAN(2020),
PARTITION p_2020 VALUES LESS THAN(MAXVALUE)
);
Проверим:
SHOW CREATE TABLE ixnfo\G
Простой пример партиционирования уже созданной таблицы:
CREATE TABLE ixnfo2 (
id INT,
name VARCHAR(30),
date DATE) ENGINE = INNODB;
SHOW CREATE TABLE ixnfo2\G
ALTER TABLE ixnfo2 PARTITION BY RANGE( YEAR(date) ) (
PARTITION p_old VALUES LESS THAN(2019),
PARTITION p_2019 VALUES LESS THAN(2020),
PARTITION p_2020 VALUES LESS THAN(MAXVALUE)
);
SHOW CREATE TABLE ixnfo2\G
Следует учесть что необходимо дисковое пространство для копии таблицы, так как будет создана копия таблицы с партиционированием, а потом заменена на текущую.
Имя таблицы с партиционированием остается как и прежде, то есть например запросы SELECT можно выполнять как раньше, например:
INSERT INTO ixnfo VALUES ('1','ixnfo.com','2019-05-05');
INSERT INTO ixnfo VALUES ('2','ixnfo.com','2020-05-05');
INSERT INTO ixnfo VALUES
('1','ixnfo.com','2018-05-05'),
('2','ixnfo.com','2020-05-05'),
('3','ixnfo.com','2021-05-05');
SELECT * FROM ixnfo;
SELECT * FROM ixnfo WHERE date LIKE "%2019%";
SELECT * FROM ixnfo WHERE date LIKE "%2020%";
SELECT * FROM ixnfo WHERE date="2020-05-05";
SELECT * FROM ixnfo WHERE date BETWEEN '2019-01-01' AND '2020-01-01';
Смотрите другие мои статьи про MySQL