Oracle11g 为什么将这一行添加到Select会大大降低SQL的速度?

Oracle11g 为什么将这一行添加到Select会大大降低SQL的速度?,oracle11g,Oracle11g,我有一个相当复杂的查询,它使用一堆表。返回所有记录通常需要约17秒(尽管它通常经过过滤)。它返回的字段之一是CAT.OLD\u code。当我将该字段替换为NVL(CAT.OLD_代码,(当ISS.WHDEF_代码='scrape'然后'scrape'或者'QH/PH/CUST'END)时)查询将永远耗时(我还没有让sql开发人员运行足够长的时间来获得前50行)ISS.WHDEF_code已经在select语句中,并且CAT和ISS都是外部连接到查询主体的。我正在crystal report中使

我有一个相当复杂的查询,它使用一堆表。返回所有记录通常需要约17秒(尽管它通常经过过滤)。它返回的字段之一是
CAT.OLD\u code
。当我将该字段替换为
NVL(CAT.OLD_代码,(当ISS.WHDEF_代码='scrape'然后'scrape'或者'QH/PH/CUST'END)时)
查询将永远耗时(我还没有让sql开发人员运行足够长的时间来获得前50行)
ISS.WHDEF_code
已经在select语句中,并且
CAT
ISS
都是外部连接到查询主体的。我正在crystal report中使用该命令,目前正在那里进行过滤,但我只是好奇为什么
CASE
语句需要这么长时间(仅使用
NVL
对性能没有明显的影响)。我以前在select语句中使用字符串操作时注意到了这一点,但这似乎只是一个简单的比较

请显示带有性能计划的实际查询SSCCE。当使用表达式代替列时,查询速度会大大减慢,这通常意味着查询变得不可搜索。(但我不打算读砖墙,也不想猜测这些内部和外部查询是如何关联的,或者可能有什么索引选择,也可能没有。)请解释计划,对于查询和表的行数,也可能是索引