PLSQL oracle - 什么性能更高? NVL()或IS NULL?

时间:2017-08-16 18:34:31

标签: sql oracle plsql database-migration

我需要迁移4百万条记录。

在验证器中,要检查列是否为NULL,哪些性能更​​高?

WHERE name IS NULL;

WHERE NVL(name,' ') = ' '

1 个答案:

答案 0 :(得分:0)

在我的机器上找到一张3689150行的表格:

create table t234 as
select editionable as name
from all_objects
cross join (
  select 1 from dual
  connect by level <= 50
);
select count(*) from t234;

  COUNT(*)
----------
   3689150

第一个更快:

set timing on
select count(*) from t234 where name is null;

  COUNT(*)
----------
   1612400

Elapsed: 00:00:00.094
select count(*) from t234 where NVL(name,' ') = ' ';

  COUNT(*)
----------
   1612400

Elapsed: 00:00:00.203

第一个查询需要94毫秒,第二个查询需要203毫秒 所以第一个速度提高了100%以上 - 使用NOT NULL运算符代替NVL(name,' ') = ' '

可以节省超过100毫秒