Ответ 1
У вас есть два отдельных индекса в одном поле таблицы (id
). Один из них подразумевается, установив id
как PRIMARY KEY
, другой, который вы, вероятно, создали явно. Требуется только один из них - наличие обоих из них может привести к снижению производительности из-за дополнительных обновлений индекса.
Просто drop один из них, чтобы решить эту проблему.
Наличие ограничения PRIMARY KEY
или UNIQUE
на столбец (или поле, если хотите) таблицы по существу означает, что для каждой вставленной строки значение этого столбца должно быть уникальным и, следовательно, оно уже не должно существовать в таблице. Наивный подход состоял бы в том, чтобы прочитать все существующие строки перед вставкой, но это сделало бы БД очень медленным, как только было вставлено несколько строк.
Чтобы справиться с этим, большинство (все?) достойных систем баз данных будут неявно создавать индексы для таких полей, чтобы они могли быстро определить, существует ли значение в таблице, без необходимости сканировать все его строки.
В результате ручное создание индексов для полей, объявленных PRIMARY KEY
или UNIQUE
, не только является реалистичным, но также может привести к потере производительности из-за дублирования работы, необходимой для поддержания индексов.