Пожалуйста, игнорируйте причины, по которым я написал запрос таким образом, это не предмет вопроса, так как это гипотетический вывод из примера из реального мира.
У меня есть случай, когда мне нужно получить записей через нумерацию страниц: только 9 записей на каждой странице.
У меня есть подзапрос, который извлекает все строки из таблицы users
(> 10000 строк), и в запросе с конвертированием я применяю нумерацию страниц следующим образом:
select *
from
(select firstname, lastname, age
from users) -- returns > 10,000 rows
order by lastname asc
offset 0 rows fetch next 9 rows only
Теперь, опять же, пожалуйста, игнорируйте, почему это написано таким образом, мой вопрос больше о понимании того, как SQL Сервер оптимизирует запросы: SQL Сервер фактически выполняет подзапрос, а затем возвращает весь сначала набор результатов, затем фильтрует его до первых 9 строк, что, конечно, отрицательно влияет на производительность, ИЛИ, каким-то образом оптимизирует ли он его, поэтому ему никогда не придется возвращать весь набор результатов, что приводит к той же производительности, если не было подзапроса?
Я переписал запрос, чтобы он был более прямым, как показано ниже:
select firstname, lastname, age
from users
order by lastname asc
offset 0 rows fetch next 9 rows only
еще предстоит К моему удивлению, я не заметил ЭТОГО улучшения производительности, что заставило меня задуматься, может быть, SQL Сервер выполняет свою собственную негласную оптимизацию?
У кого-нибудь есть какие-нибудь подсказки?