关于优化此多层(具有多层子查询)SQL 查询的提示
Tips about optimizing this multi-layered (with many layers of subqueries) SQL query
SQL 查询需要您的帮助。我有一个包含 6 层子查询的查询,该查询当前的结构如下。我期待获得建议:
减少层数而不重复相同的语句(例如,我可以将 'case when E>200' 替换为 '(Case when T2.BB >100 then B+C else B+D end) > 200' 并在第 1 层编写语句,从而消除第 2 层。我不能这样做,因为在我的原始查询中,我有一个计算列基于其子查询中的另一个计算列,然后计算基于子子查询中的另一个计算列...所以重复代码 5/6 次会让我感到困惑并让我发疯...
避免使用 select 2., select 1. 同时仍然保留所有列 (F,E,A, B,C,D,T2.BB) 在最终输出中。我想这样做是因为在我的原始查询中有 5 select.* - 我觉得这会导致服务器做很多冗余工作并减慢查询执行速度。
非常感谢您的帮助!
Select
2.*,
case when E > 200 then 'OK' else 'OH NO' end F
From
(Select
1.*,
Case when T2.BB >100 then B+C else B+D end E
From
(Select
A, B, C, D, T2.BB
From
T1
Join
T2 on T1.A = T2.AA) 1
) 2
试试 WITH 语句,它们看起来更干净,因为它们有助于维护您应用逻辑的顺序,所以它看起来像这样:
WITH
t1 as (
select ...
from src_table
)
,t2 as (
select *, ...
from t1
)
<<as much layers as needed>>
此外,如果您需要在 2 个不同的地方重复使用某些内容,您可以从任何后续语句中引用前面的 WITH 语句,即将该逻辑封装在一个地方
SQL 查询需要您的帮助。我有一个包含 6 层子查询的查询,该查询当前的结构如下。我期待获得建议:
减少层数而不重复相同的语句(例如,我可以将 'case when E>200' 替换为 '(Case when T2.BB >100 then B+C else B+D end) > 200' 并在第 1 层编写语句,从而消除第 2 层。我不能这样做,因为在我的原始查询中,我有一个计算列基于其子查询中的另一个计算列,然后计算基于子子查询中的另一个计算列...所以重复代码 5/6 次会让我感到困惑并让我发疯...
避免使用 select 2., select 1. 同时仍然保留所有列 (F,E,A, B,C,D,T2.BB) 在最终输出中。我想这样做是因为在我的原始查询中有 5 select.* - 我觉得这会导致服务器做很多冗余工作并减慢查询执行速度。
非常感谢您的帮助!
Select
2.*,
case when E > 200 then 'OK' else 'OH NO' end F
From
(Select
1.*,
Case when T2.BB >100 then B+C else B+D end E
From
(Select
A, B, C, D, T2.BB
From
T1
Join
T2 on T1.A = T2.AA) 1
) 2
试试 WITH 语句,它们看起来更干净,因为它们有助于维护您应用逻辑的顺序,所以它看起来像这样:
WITH
t1 as (
select ...
from src_table
)
,t2 as (
select *, ...
from t1
)
<<as much layers as needed>>
此外,如果您需要在 2 个不同的地方重复使用某些内容,您可以从任何后续语句中引用前面的 WITH 语句,即将该逻辑封装在一个地方