Индексы
Есть ли у вас какие-либо индексы - особенно по LISTINGS_META.listing_id
?
Я переписал ваш запрос как:
SELECT l.id
FROM listings AS l
LEFT JOIN listings_meta AS lm ON lm.listing_id = l.id
AND lm.meta_key = 'email'
AND lm.meta_value = 'test@test.com'
LEFT JOIN listings_meta AS lm2 ON lm2.listing_id = l.id
AND lm2.meta_key = 'submitter_email'
AND lm2.meta_value = 'test@test.com'
WHERE l.listing_title RLIKE 'Test'
GROUP BY l.id LIMIT 1
ГДЕ предложение
RLIKE
(любая функциональность регулярного выражения MySQL в этом отношении) находится на одном уровне с:
WHERE l.listing_title LIKE '%Test%'
Никто не может использовать индекс для столбца LISTING.listing_title
...
Лучший способ улучшить поиск listing_title
был бы, если бы таблица LISTING
была MyISAM, поэтому вы могли бы добавить полнотекстовый индекс в столбец LISTING.listing_title
, чтобы использовать:
WHERE MATCH(l.listing_title) AGAINST ('Test')
... но учтите, что минимальная длина слова составляет 3 символа для полнотекстового поиска (FTS) ....