Я работаю над оптимизацией базы данных, где есть объемная вставка из CSV-файла (около 3800 записей) с интервалом каждые 15 минут.mysql too many indexe keys
Для этого я запускаю файл mis.sql через cron. Этот файл содержит Nine (09) mysql-запросы, которые выполняют удаление дубликатов из таблицы, в которой размещена массовая вставка, Inner join Inerts, Deletes and Updates (ALTER, DELETE, INSERT & UPDATE).
В последнее время возникает проблема с запросом, который выполняется непосредственно перед запросом массовой вставки. Запросов:
ALTER IGNORE TABLE pb
ADD UNIQUE INDEX (hn, time);
ОШИБКА 1069 (42000): Слишком много указанных ключей; max 64 ключа разрешено
При возникновении ошибки выше все последующие запросы пропускаются. Затем я проверил таблицу pb
и обнаружил, что существует 64 уникальных индексных ключа, созданных с одинаковым значением, наряду с 02 индексными ключами и 01 основным ключом.
При попытке удалить один из уникальных индексов он занимает слишком много времени (почти 15 минут для 979 618 записей), но в конце он не удаляется.
Есть ли какие-либо решения этой проблемы?
спасибо Thorsten Kettner ..! Даже после выполнения запроса, т. Е. DROP INDEX index_name ON tbl_name, он занимает огромное время (около 10-15 минут) и, наконец, выдает ошибку. Указатель остается, его нельзя удалить. Использование ALTER TABLE для удаления дубликатов, относится к http://stackoverflow.com/a/14050607/3872641 –
Уникальный индекс не * удаляет * дубликаты. Он не позволяет * разрешать * их! Таким образом, вы определяете таблицу и индекс * один раз *, и все. Вы не делаете этого снова и снова. С момента, когда вы определили индекс, не может быть дубликатов. Вы должны использовать 'INSERT ON DUPLICATE KEY UPDATE' или' INSERT IGNORE' для обработки конфликтов. Что касается снижения индекса, я не вижу причин, по которым это не работает немедленно. Вот альтернативный синтаксис, который вы можете попробовать, но я не думаю, что это имеет значение: 'ALTER TABLE table_name DROP INDEX index_name'. Убедитесь, что при снижении индекса нет действий в таблице. –
Это сделано .... Я удалил все уникальные индексы и установил только один уникальный индекс ... каждый раз, когда cron запускает .sql-файл, он также будет выполнять - ALTER TABLE 'pb' DROP INDEX hn_tm_indx, ADD UNIQUE INDEX hn_tm_indx (hn, tm); –