【发布时间】:2021-09-15 23:30:54
【问题描述】:
我想谈谈我们可以在 select 语句中使用 nvl 或 case 的场景。 在 PL-SQL 中使用 nvl 会更容易,这是真的。但是当涉及到查询时(在 select 语句中)
使用 nvl 会使其变慢吗?我有一个包含大量带有 NVl 的 select 语句的包。如果我用案例替换它们会更快吗?
例如;
select case sum(nvl(birikim,0)) when null then 0 else sum(nvl(birikim,0) end
而不是使用这个,
select nvl(sum(nvl(birikim, 0)), 0))
【问题讨论】:
-
nvl(sum(birikim), 0)足够了,测试一下。 -
优化内置函数调用是您需要担心的最后一步。您的查询速度是否足够快,可以看出差异?它是处理单个记录吗?出于测试目的,您可能会花一些时间准备适当的设置,包括冷启动、缓冲区刷新、多次运行等,并将完全没有功能的普通选择和相同的查询与例如 NVL 进行比较。我敢打赌,时间在统计上是微不足道的,主要受网络和磁盘 IO 的影响
标签: sql oracle case query-optimization nvl