2010-07-20 2 views
4

У меня есть PHP-скрипт из двух частей.MySQL запросов медленнее после DELETE

  1. Первое, что удаляет некоторые строки в базе данных
  2. Второе, что вызывает ВЫБРАТЬ запросов

Второй сценарий в одиночку работает примерно 0,2 сек. Когда обе части обрабатываются, вторая часть занимает 5 секунд. В следующий раз, когда второй скрипт работает один, он возвращается к 0.2 сек.

Любой ключ?

+2

Я полагаю, что все индексы, у вас есть на этой таблице перестраивается после удаления. Можете ли вы опубликовать результаты SHOW INDEX FROM mytable? – twerq

+0

Если вы ждете несколько секунд после удаления, выполняется ли 'SELECT'? То есть, запустите удаление, подождите, а затем запустите select. – Mike

+0

На самом деле есть индекс: один первичный ключ. Однако между двумя частями сценариев нет времени ожидания. Восстановлен ли индекс во время выполнения второй части? существует ли способ принудительного восстановления индекса перед второй частью скрипта? – MindTailor

ответ

1

Вероятно, что запрос был кеширован, поэтому он работает быстрее во второй раз, more info here. Если вы добавите SQL_NO_CACHE в запрос, вы сможете определить, является ли кеш фактором.

+0

Я думал о кеше, но кажется, что когда запрос выполняется быстро, другой работает быстрее тоже ... – MindTailor

0

Ваш запрос-кэш для таблицы «недействителен» каждый раз, когда таблица обновляется.

В результате любой UPDATE/DELETE/INSERT в вашу таблицу очистит кэш запросов этой таблицы и заставит новый диск читать следующий SELECT. Результатом будет медленный запрос.

Вот ссылка на MySQL DOCs.

Если ваш стол невероятно большой, вы можете изучить таблицы MyISAM и отдельный Key-Cache для повышения производительности чтения. MyISAM = быстрое чтение, быстрая запись, ужасный параллелизм для write/udpates. InnoDB = посредственная скорость чтения, хороший параллелизм для записи/обновления.

- J Йоргенсон -

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