【发布时间】:2023-03-28 18:29:02
【问题描述】:
您好,我有一个非常慢的 SQL。
select case when (value=1)
then (select <Some Math Logic> from table where table.id=table_2.id)
else 'false' end
from table_2 where <where clause>
我想知道的是 case 子句是如何工作的..??
select <Some Math Logic> from table 的部分正在处理巨大的表集。
在 Java 中,我们在 if 语句中看到了这一点
if(condition_1==true)
{return output;}
else
{return false;}
如果 if 语句为假,那么它里面的部分永远不会被处理,那么我想知道的是它在 oracle SQL 中是否也一样。
它是否适用于以下逻辑..??
- 检查案例条件
- 如果为真,则在输出中处理
- else 处理其他输出。
还是采用以下逻辑:
- 预处理所有子查询
- 检查案例条件
- 如果为真,则显示在输出中
- else 显示其他输出。
请帮忙
编辑:伙计们,我不想调整上面显示的查询......这只是一个虚拟的。
我需要知道的是case子句是如何一步一步工作的。
如果有人对此有一些意见,请分享
【问题讨论】:
-
您的子查询与主查询有何关联?
-
有连接子句不能编辑查询..,.
-
据我所知,案例逻辑按照您在 java 中的示例工作。当你将 (value = 1) 切换到总是返回 false 的东西时会发生什么?还是慢吗?也许问题出在其他地方。
-
你试过
explain plan吗?我猜会发生第三种情况:查询可能被重写为table和table_2在其id列上的连接。这是两张桌子上的一个选择。对于每个结果行,要么评估<some math logic>,要么使用false- 取决于value。如果可能,在两个id列上设置索引。 -
value来自哪里?是 TABLE_2 上的参数还是列?
标签: sql performance oracle query-performance