Пожалуйста, эти два типа запроса в уме:Использование «где затем Союз» или с помощью "Союз тогда Где
--query1
Select someFields
From someTables
Where someWhereClues
Union all
Select someFields
FROM some Tables
Where someWhereClues
--query2
Select * FROM (
Select someFields
From someTables
Union all
Select someFields
FROM someTables
) DT
Where someMixedWhereClues
Примечание:
В обоих запросов конечных полей результата одинаковы
Я думал, что 1-й. запрос быстрее или его производительность лучше!
Но после некоторых исследований я смущен этим note:
SQL Server (как образец RDBMS) сначала считывает целые данные затем искать записи. => поэтому в обоих запросах будут записываться и искать все записи.
Пожалуйста, помогите мне в моих недоразумениях и дальше, если есть какие-либо другие различия между query1 и query2?
Редактировать: добавление планов выборки:
select t.Name, t.type from sys.tables t where t.type = 'U'
union all
select t.Name, t.type from sys.objects t where t.type = 'U'
select * from (
select t.Name, t.type from sys.tables t
union all
select t.Name, t.type from sys.objects t
) dt
where dt.type = 'U'
планы выполнения:
оба одинаковы и 50%
Вы можете проверить, что происходит, выполнив план выполнения для обоих запросов. –
Если вы проверяете планы выполнения и статистику сервера (время/IO) для данных данных, то вы можете видеть, что лучше. В верхней части моей головы первый выглядит лучше, но оптимизатор сервера sql может быть достаточно умным, чтобы сделать оба равным. Следовательно, взгляд на то, что он запускает, - это способ анализа. –
Я тоже добавляю планы выполнения !! ?? –