它是如何工作的? - 查询中的多个 SubSelect
How does it works? - Multiple SubSelect in Query
我有一个由 PowerBi Desktop 的 QueryFolding 生成的查询。
我试图了解它是如何工作的。
我可以看到有一个大查询,带有嵌套的 sub-selects.
如果我 运行 这个查询,这需要大约 1 秒才能完成。
但是当我 运行 第二个查询时,即多个子 select 的内部查询,这需要大约两分钟。
那么,SQL 服务器如何处理子select 中的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
这显着限制了查询 return 的值,使查询 运行 更快。另一方面,内部查询没有过滤器,因此它必须 return 完整的结果集。如果 [$Table] 有很多行,那么这可能是一个漫长的过程
我有一个由 PowerBi Desktop 的 QueryFolding 生成的查询。 我试图了解它是如何工作的。 我可以看到有一个大查询,带有嵌套的 sub-selects.
如果我 运行 这个查询,这需要大约 1 秒才能完成。 但是当我 运行 第二个查询时,即多个子 select 的内部查询,这需要大约两分钟。
那么,SQL 服务器如何处理子select 中的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
这显着限制了查询 return 的值,使查询 运行 更快。另一方面,内部查询没有过滤器,因此它必须 return 完整的结果集。如果 [$Table] 有很多行,那么这可能是一个漫长的过程