2010-12-16 4 views
1

Сегодня я работал над некоторыми проблемами производительности MySQL. Я использовал EXPLAIN для поиска табличных сканирований и исправил некоторые проблемы, создав индексы.MySQL, индексы и «Время ожидания ожидания ожидания ожидания превышено»

Я читаю, потому что супер быстро.

Но с тех пор запросы обновления очень проблематичны. Когда я перезапускаю Mysql, первые несколько вложений или обновлений работают нормально. После этого в запросах обновления появляется сообщение об ошибке «Тайм-аут блокировки ожидания превышен, попробуйте перезапустить транзакцию» через 60 секунд.

Является ли Mysql воссозданы большие индексы на каждой вставке/обновлении? Как я могу это решить?

ответ

1

Да, MySQL воссоздает индексы при каждом обновлении. Вам нужно найти сладкое место. Поместите только индексы на клавиши, которые будут использоваться на условиях WHERE (или присоедините ON условиях).

Если вы указали все, ваши обновления будут слишком медленными. Если вы ничего не указали, ваши чтения будут слишком медленными.

Если у вас по-прежнему возникают проблемы с производительностью после сужения индексов вплоть до того, что вам нужно, вы должны, вероятно, переоценить свою структуру данных.

+0

Я сделал то, что вы говорите. Я создавал индексы только для столбцов, где находятся условия или условия ON, после того, как EXPAIN указал, что таблица сканирует строки. – koen 2010-12-16 22:45:41

Смежные вопросы