Я хочу улучшить производительность SQL-запроса. У меня есть таблица 'tblEntries' со столбцом 'sTag':
+----+------+-------+------+---------+
| Id | sTag | sPath | lVer | bActive |
+====+======+=======+======+=========+
| 1 | NULL | t1 | 100 | + |
| 2 | NULL | t2 | 110 | + |
| 3 | x1 | t4 | 110 | + |
| 4 | x1 | t3 | 120 | + |
| 5 | x2 | t7 | 100 | + |
+----+------+-------+------+---------+
Клиент запрашивает путь с указанным тегом, и запрос должен вернуть указанную запись со следующим условием:
- Если есть запись с указанным тегом, она должна вернуть запись с максимальным значением lVer, а bActive должно быть ИСТИНА.
- Если нет записи с указанным тегом, он должен возвратить запись со значением NULL sTag и с максимальным значением lVer, а bActive должно быть ИСТИНА.
«С меткой»запись имеет больший приоритет над «без тега».
Текущий запрос SQL:
SELECT lVer, sPath
FROM tblEntries
INNER JOIN
(SELECT MAX(lVer) AS V, sTag AS T
FROM tblEntries
WHERE bActive = TRUE
GROUP BY sTag)
ON lVer = V
WHERE T IS NULL OR T = 'user_tag'
ORDER BY T DESC
Затем я могу выбрать первую запись, которая удовлетворяет условиям. Могу ли я избежать подзапроса?
Спасибо!