2014-01-09 2 views
0

Самая странная вещь произошла сегодня. Когда я запускаю этот запрос:Тайм-аут при попытке удалить запись

DELETE FROM some_table WHERE id IN(5)

Я получаю ошибку в 30 второй тайм-аут в PHP. Тот же запрос выполняется без проблем на моем локальном сервере разработки, но когда я перехожу на рабочий сервер, я получаю таймаут.

Отсутствие ошибки sqlite или что-то в этом роде, только «Неустранимая ошибка: максимальное время выполнения превышено 30 секунд»: |

В чем может быть проблема? Есть ли способ, по крайней мере, отлаживать это?

+0

У вас есть большое количество строк в таблице? Использование IN (5) означает, что он буквально просмотрит каждую строку даже после того, как найдет результат. Вероятно, вы должны изменить это значение WHERE ID = '5' LIMIT 1. Использование literal = должно ускорить вас, а LIMIT 1 отбрасывает запрос после первого успеха. Без ограничения он должен просматривать каждую строку, чтобы гарантировать, что другие не равны 5. Я не на 100% положителен, если SQL автоматически упадет, если это первичный/уникальный ключ. – Rottingham

+0

Нет, всего 5 записей. Но столбец 'id' является внешним ключом внутри другой таблицы с записями ~ 100K. В другой таблице на нем есть УДАЛИТЬ КАСКАД. Может быть, это и есть причина? – Alex

+0

Уху. Теперь у вас есть 5 строк, которые нужно сравнить с каждым из 100K строк, что означает, что он должен индексировать 500K плюс строки. – Rottingham

ответ

1

В довершение всех моих новых кодов я ставлю эту функцию

ini_set('max_execution_time',60); 

reference.

для отладки моего сценария выполнения времени я использую этот

$start = microtime(true); 
function execute(){global $start;$end = microtime(true);$time=number_format(($end - $start), 5);return$time;} 
//..... your code here 
echo '<br><b>.'Page Loaded In 'execute().' Seconds<b/>'; 
Смежные вопросы