Вы должны проверить статус индексов, который не будет отображаться под CHECK TABLE
.
Для этого попробуйте следующее
SHOW VARIABLES LIKE 'userstat';
SET GLOBAL USERSTAT = ON;
-- just to get all columns used from the stats table
-- SHOW COLUMNS FROM `INFORMATION_SCHEMA`.`INDEX_STATISTICS`
-- get all indices just in case
SELECT * FROM `INFORMATION_SCHEMA`.`INDEX_STATISTICS`;
-- get all indices for the table
SELECT * FROM `INFORMATION_SCHEMA`.`INDEX_STATISTICS` WHERE `TABLE_NAME` = 'yourTable';
Это позволит выяснить, что индексировано, а что не в ваших таблицах.
Другое дело, что при добавлении / удалении индексов лучше использовать тики типа \
TEST008``, чем "TEST008"
. Если это не работает ... клонируйте / скопируйте содержимое таблицы, отбросьте его и создайте заново.
CREATE TEMPORARY TABLE `backupTable`
SELECT * FROM `yourTable`;
Для получения дополнительной информации прочтите: Создать временную таблицу
Убедитесь, что это произойдет, поскольку эта таблица памяти может выйти из строя из-за размера индекса. Если это произойдет, вам следует увеличить или изменить используемый алгоритм индексации HA SH.
Если все работает как ожидалось ADD строки временной таблицы в следующем операторе
Примечание : обязательно добавьте все недостающие поля
DROP TABLE IF EXISTS `yourTable`;
CREATE TABLE `yourTable`(
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
-- other columns
PRIMARY KEY(`id`)
) Engine=InnoDB; -- or extend this with collation, and other instructions
INSERT INTO `yourTable`
SELECT * FROM `backup`;
Это должно сработать.
Последнее решение - жесткое удаление из файловая система таблица InnoDB, но я сомневаюсь, что это так.