Я использую Mysql 5.6 с ~ 150 миллионами записей в таблице транзакций (InnodB).По мере увеличения размера эта таблица становится неуправляемой (с добавлением столбца или индекса) и работает медленно даже при необходимой индексации.После поиска в интернете я обнаружил, что настало время разделить таблицу.Я уверен, что разделение решит следующие задачи для меня
- Улучшение времени отклика операторов DML (с помощью сокращения секционирования)
- Улучшение процесса архивирования
Но яЯ не уверен, что (и как) это улучшит производительность DDL для этой таблицы или нет.Точнее, следуя производительности DDL.
- ALTER TABLE ADD / DROP COLUMN
- ALTER TABLE ADD / DROP INDEX
Я просмотрел документацию по Mysql и Интернет, ноне смог найти мой ответ.Может ли кто-нибудь помочь мне в этом или предоставить соответствующую документацию для этого.
Моя структура таблиц выглядит следующим образом
CREATE TABLE `TRANSACTION` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(11) DEFAULT NULL,
`parent_uuid` char(36) DEFAULT NULL,
`order_number` varchar(64) DEFAULT NULL,
`order_id` int(11) DEFAULT NULL,
`order_uuid` char(36) DEFAULT NULL,
`order_type` char(1) DEFAULT NULL,
`business_id` int(11) DEFAULT NULL,
`store_id` int(11) DEFAULT NULL,
`store_device_id` int(11) DEFAULT NULL,
`source` char(1) DEFAULT NULL COMMENT 'instore, online, order_ahead, etc',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`flags` int(11) DEFAULT NULL,
`customer_lang` char(2) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `parent_id` (`parent_id`),
KEY `business_id` (`business_id`,`store_id`,`store_device_id`),
KEY `parent_uuid` (`parent_uuid`),
KEY `order_uuid` (`order_uuid`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
И я делю с использованием следующего оператора.
ALTER TABLE TRANSACTION PARTITION BY RANGE (id)
(PARTITION p0 VALUES LESS THAN (5000000) ENGINE = InnoDB,
PARTITION p1 VALUES LESS THAN (10000000) ENGINE = InnoDB,
PARTITION p2 VALUES LESS THAN MAXVALUE ENGINE = InnoDB)
Спасибо!