относительно
SELECT * FROM posts WHERE reply LIKE "%http://%" ORDER BY id DESC LIMIT 1
Из-за подстановочных знаков с обеих сторон http://
MySQL не сможет использовать индекс для reply
, чтобы быстро найти то, что вы ищете. Более того, так как вы запрашиваете тот, у кого самый большой id
, MySQL должен будет получить все результаты, чтобы убедиться, что у вас есть тот, у кого самый большой идентификатор.
В зависимости от того, сколько данных из таблицы posts
состоит из reply
, может быть целесообразно добавить составной индекс для (id, reply)
и изменить запрос на что-то вроде
SELECT id FROM posts WHERE reply LIKE "%http://%" ORDER BY id DESC LIMIT 1
(который будет иметь только индексное выполнение), затем присоединитесь к таблице публикаций или извлеките сообщения, используя восстановленные id
s. Если запрос имеет index only execution
, а индекс помещается в память , а уже находится в памяти (из-за обычного использования или из-за преднамеренного разогрева), вы могли бы потенциально ускорить выполнение запроса.
Сказав все это, если одинаковые запросы на двух одинаковых серверах с одинаковыми данными дают разные планы выполнения и время выполнения, возможно, настало время OPTIMIZE TABLE posts
обновить статистику индекса и / или дефрагментировать таблицу. Если вы недавно добавляли / удаляли индексы, все могло сбиться с пути. Более того, если данные фрагментированы, когда они вытягивают строки в порядке PRIMARY KEY, они могут перемещаться по всему диску для получения данных.
Что касается DELETE FROM posts WHERE threadId=X
, то все должно быть в порядке, пока существует индекс threadId
.