Самая странная вещь произошла сегодня. Когда я запускаю этот запрос:Тайм-аут при попытке удалить запись
DELETE FROM some_table WHERE id IN(5)
Я получаю ошибку в 30 второй тайм-аут в PHP. Тот же запрос выполняется без проблем на моем локальном сервере разработки, но когда я перехожу на рабочий сервер, я получаю таймаут.
Отсутствие ошибки sqlite или что-то в этом роде, только «Неустранимая ошибка: максимальное время выполнения превышено 30 секунд»: |
В чем может быть проблема? Есть ли способ, по крайней мере, отлаживать это?
У вас есть большое количество строк в таблице? Использование IN (5) означает, что он буквально просмотрит каждую строку даже после того, как найдет результат. Вероятно, вы должны изменить это значение WHERE ID = '5' LIMIT 1. Использование literal = должно ускорить вас, а LIMIT 1 отбрасывает запрос после первого успеха. Без ограничения он должен просматривать каждую строку, чтобы гарантировать, что другие не равны 5. Я не на 100% положителен, если SQL автоматически упадет, если это первичный/уникальный ключ. – Rottingham
Нет, всего 5 записей. Но столбец 'id' является внешним ключом внутри другой таблицы с записями ~ 100K. В другой таблице на нем есть УДАЛИТЬ КАСКАД. Может быть, это и есть причина? – Alex
Уху. Теперь у вас есть 5 строк, которые нужно сравнить с каждым из 100K строк, что означает, что он должен индексировать 500K плюс строки. – Rottingham