Партиционирование таблиц в MySQL

Партиционирование таблиц в 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

Оставьте комментарий

Добавить комментарий