【问题标题】:Which performes better for a function based index: NVL2 or DECODE?对于基于函数的索引,哪个性能更好:NVL2 还是 DECODE?
【发布时间】:2016-07-16 01:42:45
【问题描述】:

我想创建一个基于函数的索引,以便在 oracle 11g 表的列中索引 NULL 值。

哪个性能更好:NVL2 还是 DECODE?

NVL2(nr.processed_datetime,'Y','N')

DECODE(nr.processed_datetime,NULL,'N','Y')

【问题讨论】:

  • kordirko,您需要反转您的结果之一:NVL2(null,2,1)
  • 您是否在您的环境中使用您的数据进行了测试?在我看来,性能上存在可衡量的差异似乎极不可能(假设您的查询都使用您索引的任何结构)。
  • 索引构造比这两个函数重得多,因此您不太可能看到一些显着差异。至于我nvl2在这里更自然。

标签: oracle performance indexing oracle11g


【解决方案1】:

要查找列值是否为空,您无需使用任何函数。 在你的 SQL 条件中使用 IS NULL 或 IS NOT NULL

其中 nr.processed_datetime 为 NULL ; 要么 其中 nr.processed_datetime 不为空;

为了获得更好的性能,您可以在应该没问题的列上创建普通索引

【讨论】:

  • Oracle 不索引 NULL。
猜你喜欢
  • 2019-06-24
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多