У меня есть этот запрос:SQL (несколько вложенных запросов)
SELECT p.id, r.status, r.title
FROM page AS p
INNER JOIN page_revision as r ON r.pageId = p.id AND (
r.id = (SELECT MAX(r2.id) from page_revision as r2 WHERE r2.pageId = r.pageId AND r2.status = 'active')
OR r.id = (SELECT MAX(r2.id) from page_revision as r2 WHERE r2.pageId = r.pageId)
)
который возвращает каждую страницу и последнюю активную ревизию для каждого, если нет активного пересмотра отсутствует, в этом случае он просто возвращает последняя редакция.
Можно ли это оптимизировать для повышения производительности или просто общей читаемости? У меня сейчас нет проблем, но я беспокоюсь, что когда это попадает в производственную среду (где может быть много страниц), это будет плохо работать.
Кроме того, есть ли очевидные проблемы, о которых я должен знать? Использование подзапросов всегда меня пугает, но, насколько мне известно, это невозможно сделать без них.
Примечание:
Причины условие в JOIN, а не ИНЕК, что в других запросах (где используются та же логика) Я СЛЕВА, соединяющий из таблицы «сайта» в " page ", и если страниц нет, я все равно хочу вернуть сайт.
Джек
Edit: Я использую MySQL
Какую платформу использовать используя? – Quassnoi
Извините, забыли сказать, MySQL –
какие индексы у вас есть на таблицах page_revision и page? –