Существует очень веская причина, по которой вы не можете выполнить DISABLE KEYS
для таблицы InnoDB;InnoDB не предназначен для его использования, а MyISAM.
На самом деле, вот что происходит, когда вы перезагрузите mysqldump:
Вы увидите CREATE TABLE
для таблицы MyISAM, следующей заблокировка записи.
Перед выполнением всех массовых вставок выполняется вызов ALTER TABLE ... DISABLE KEYS
.
Для этого отключаются вторичные индексы в таблице MyISAM.
Затем выполняются массовые вставки.Пока это делается, PRIMARY KEY и все UNIQUE KEYS в таблице MyISAM отключены.Перед UNLOCK TABLEs
выполняется вызов ALTER TABLE ... ENABLE KEYS
для линейного перестроения всех неуникальных индексов.
ИМХО эта операция не была закодирована в InnoDB Storage Engine, поскольку все ключи в неуникальном индексеприходят с записью первичного ключа от gen_clust_index (он же Clustered Index).Это было бы очень дорогой операцией, поскольку построение неуникального индекса потребовало бы времени выполнения O (n log n) для извлечения каждого уникального ключа для присоединения к неуникальному ключу.
В свете этого публикацияпредупреждение о попытке DISABLE KEYS/ENABLE KEYS
для таблицы InnoDB намного проще, чем кодирование исключений из mysqldump для любых особых случаев, связанных с механизмами хранения не-MyISAM.