Не зная ничего о соответствующей таблице, я делаю предположение на основе имен полей в запросе. Я предполагаю, что самая ограничительная часть запроса - это часть guid=...
. Из структуры запроса также следует, что содержимое этого поля не полностью определено (иногда оно может иметь значение хеша md5, а иногда нет). Если это правильно, то кажется вероятным, что использование md5(guid) = '...'
будет означать, что оно не может эффективно ограничивать эту часть запроса.
Так что, если возможно, кажется, что это сделало бы поиск более эффективным, если бы у вас было поле, которое всегда содержало хеш-значение md5 поля guid. Тогда это поле может быть проиндексировано и обеспечить гораздо более эффективный поиск для этой части запроса.
Чтобы попытаться уточнить, рассмотрим только этот запрос:
SELECT SQL_CALC_FOUND_ROWS wp_rb_posts.*
FROM wp_rb_posts WHERE
(guid = '956e208f101562f6654e88e9711276e4') OR
(MD5(guid) = '956e208f101562f6654e88e9711276e4'))
Предполагая, что MySQL не разрешает индексы с использованием скалярных функций (что я не думаю, что это происходит, и если я ошибаюсь, тогда весь этот ответ бессмыслен), тогда этот запрос потребует полного сканирования таблицы, вычисляя md5(guid)
на каждая запись. Принимая во внимание, что следующий запрос может быть оптимизирован намного лучше (при условии, что индекс существует в обоих полях:
SELECT SQL_CALC_FOUND_ROWS wp_rb_posts.*
FROM wp_rb_posts WHERE
(guid = '956e208f101562f6654e88e9711276e4') OR
(md5_guid = '956e208f101562f6654e88e9711276e4')