Этот запрос может быть оптимизирован в зависимости от того, какое условие является более избирательным: tags.name = 'iphone4'
или article.date > '2010-02-07 13:25:46'
Если статей с тегом iphone
меньше, чем статей, опубликованных после Feb 7
, тогда ваш исходный запрос хорош.
Если есть много статей с тегом iphone
, но мало опубликованных после Feb 7
, тогда этот запрос будет более эффективным:
SELECT article.id, users.username, article.title
FROM tags
JOIN article
ON article.id = tags.article_id
AND article.status = '1'
AND article.section = 'mobile'
AND article.date > '2010-02-07 13:25:46'
JOIN users
ON users.id = article.author_id
WHERE tags.name = 'iphone4'
ORDER BY
tags.article_date DESC, tags.article_id DESC
Обратите внимание, что условие ORDER BY
изменилось. Это может или не может быть тем, что вы хотите, однако, как правило, порядки id
и date
соответствуют друг другу.
Если вам действительно нужно ваше исходное ORDER BY
условие, вы можете оставить его, но оно добавит filesort
(или просто вернется к вашему первоначальному плану).
В любом случае создайте индекс для
article (status, section, date, id)