Чрезвычайно медленный запрос UPDATE - PullRequest
11 голосов
/ 29 октября 2010

Я заметил, что мой скрипт стал очень медленным, затем я сузился до проблемы: это был запрос на обновление.Странно то, что запрос SELECT очень быстрый.В таблице около 600 000 записей.И да, id является уникальным первичным ключом.Вот несколько примеров:

SELECT * FROM `tmp_pages_data` WHERE id = 19080 LIMIT 0 , 30

Showing rows 0 - 0 (1 total, Query took 0.0004 sec)

А теперь запрос на обновление:

UPDATE tmp_pages_data SET page_status = 1 WHERE id = 19080

1 row(s) affected. ( Query took 24.5968 sec )

Как видите, выбор очень быстрый, но обновление очень медленное.Как это возможно?

Ответы [ 2 ]

1 голос
/ 29 октября 2010

Да, это очень странно. Единственное, о чем я могу думать, это то, что таблица tmp_pages_data заблокирована другой транзакцией, или строка с id = 19080 заблокирована другой транзакцией.

Другая (невероятная вещь) в том, что у вас есть индекс page_status, который необходимо обновить в предложении UPDATE, и выполнение этой части занимает много времени.

0 голосов
/ 29 октября 2010

Хорошо, готово!

Мне пришлось перезапустить Apache, теперь он отлично работает (на самом деле я перезагрузил Ubuntu)!

UPDATE tmp_pages_data SET page_status =1 WHERE id =19080

1 row(s) affected. ( Query took 0.0004 sec )

Спасибо всем за ваши предложения :)

...