它是如何工作的? - 查询中的多个子选择



我有一个由PowerBi Desktop的QueryFold生成的查询。 我试图了解它是如何工作的。 我可以看到有一个大查询,带有嵌套的子选择。

如果我运行此查询,这大约需要 1 秒才能完成。 但是当我运行第二个查询时,即多个子选择中的内部查询,这大约需要两分钟。

那么,SQL Server 如何处理子选择中的 TOP 1000 或 WHERE? 为什么内部查询比整个查询慢?

谢谢!!

整个查询(更快(

select top 1000
[_].[NOMBRE_1] as [NOMBRE_1],
[_].[SUSCRIPCIO] as [SUSCRIPCIO],
[_].[ANOMES] as [ANOMES],
1 as [Rut]
from 
(
select [_].[NOMBRE_1],
[_].[SUSCRIPCIO],
[_].[ANOMES]
from 
(
select [NOMBRE_1],
[SUSCRIPCIO],
[ANOMES]
from [dbo].[TABLE] as [$Table]
) as [_]
where [_].[SUSCRIPCIO] >= convert(datetime2, '2020-01-01 00:00:00') and [_].[SUSCRIPCIO] <= convert(datetime2, '2020-02-01 00:00:00')
) as [_]

内部子选择(较慢(

select [NOMBRE_1],
[SUSCRIPCIO],
[ANOMES]
from [dbo].[TABLE] as [$Table]

因为整个查询包含两个过滤器:

where [_].[SUSCRIPCIO] >= convert(datetime2, '2020-01-01 00:00:00') and [_].[SUSCRIPCIO] <= convert(datetime2, '2020-02-01 00:00:00')

top 1000

这极大地限制了查询返回的值,从而使查询运行得更快。另一方面,内部查询没有筛选器,因此它必须返回完整的结果集。如果 [$Table] 有大量行,那么这可能是一个漫长的过程

最新更新