Я использую Mysql 5.6 с ~ 150 миллионами записей в таблице транзакций (InnodB). По мере увеличения размера эта таблица становится неуправляемой (добавление столбца или индекса) и замедляется даже при обязательном индексировании. После поиска в Интернете я обнаружил, что пришло время разбить таблицу. Я уверен, что разделение решит следующую задачу для меня
- Улучшить время отклика операторов DML (используя отсечение секционирования)
- Улучшить архивный процесс
Но я не уверен, улучшит ли это (и как) производительность DDL для этой таблицы или нет. В частности, после производительности DDL.
- ИЗМЕНИТЬ ТАБЛИЦУ ДОБАВИТЬ/УДАЛИТЬ СТОЛБЦ
- ИЗМЕНИТЬ ТАБЛИЦУ ДОБАВИТЬ/УДАЛИТЬ ИНДЕКС
Я просмотрел документацию 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)
Спасибо!
SHOW CREATE TABLE table
утверждение и пример того, как или в каком столбце вы хотите использовать разбиение, прежде чем мы сможем что-то предложить или дать совет. - person Raymond Nijland   schedule 04.12.2018