Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

Как быстро удалить индексы в таблице MySQL?

#индексы #mysql


Возможно ли быстро удалить мои 7 индексов из таблицы в MySQL? Как-то например в один
запрос прописать удаление всех индексов?
Потому что в базе 400к записей и один индекс удаляется по 15 минут. Очень долго :(    


Ответы

Ответ 1



alter table `имя таблицы` drop index `имя 1 индекса`; alter table `имя таблицы` drop index `имя 2 индекса`; alter table `имя таблицы` drop index `имя 3 индекса`; alter table `имя таблицы` drop index `имя 4 индекса`; alter table `имя таблицы` drop index `имя 5 индекса`; alter table `имя таблицы` drop index `имя 6 индекса`; alter table `имя таблицы` drop index `имя 7 индекса`; Иного способа избавиться от индекса нет, то есть одной пулей 7 зайцев вы убить не сможете.

Ответ 2



Серебряная пуля есть при использовании information_schema. Можно и одним запросом: ALTER TABLE tableName DROP INDEX first, DROP INDEX second, …; На чистом SQL пока не хватило терпения сделать (ибо разбираться с курсором/циклами - сейчас не охота), но с приправой ЯП можно очень удобно организовать. Вот таким образом можно получить названия индексов для база.таблица: SET @dbName = 'dbName'; SET @tableName = 'tableName'; SELECT DISTINCT INDEX_NAME FROM `information_schema`.`STATISTICS` WHERE TABLE_NAME = @tableName AND TABLE_SCHEMA = @dbName AND INDEX_NAME <> 'PRIMARY'; Поскольку без удаления атрибута AI PRIMARY индекс не сбросить, то: INDEX_NAME <> 'PRIMARY' Далее - по циклу вставляем названия индексов и "роняем" их. DROP INDEX index_name ON @dbName.@tableName; Пример на PHP: public function dropIndexes($tableName = 'table', $dbName = 'db') { $db = $this->getAdapter(); $query = "SELECT DISTINCT INDEX_NAME as `index` FROM `information_schema`.`STATISTICS` WHERE TABLE_NAME = '$tableName' AND TABLE_SCHEMA = '$dbName' AND INDEX_NAME <> 'PRIMARY';"; $result = $db->fetchAll($query); foreach ($result as $index) { $query = "DROP INDEX `" . $index['index'] . "` ON `$dbName`.`$tableName`;"; $db->query($query); } }

Комментариев нет:

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