是否有任何选项可以替换参数

时间:2021-06-02 06:57:43

标签: sql oracle performance

我一直在我的 WHERE 子句中使用 NVL,直到现在它都运行良好。 但是在列有NULL值并且参数也是NULL的情况下,它没有返回任何查询。

select * from Table
where
f_date BETWEEN NVL(:F_DATE_FROM,F_DATE) AND NVL(:F_DATE_TO,F_DATE)
AND op_code = NVL(:CODE, OP_CODE) 
AND T_CBC = NVL(:TO_CBC,T_CBC)
order by fiscal_date desc

我更新了如下查询,它按预期返回了所有记录。但是,执行查询需要很长时间。原始查询需要 1.5 分钟,新查询需要 7 分钟。请问有什么方法可以微调以下查询吗?

select * from Table
where
f_date BETWEEN NVL(:F_DATE_FROM,F_DATE) AND NVL(:F_DATE_TO,F_DATE)
AND (OP_CODE = :CODE or :CODE is null) 
AND (T_CBC = :TO_CBC or :TO_CBC is null)
order by fiscal_date desc

1 个答案:

答案 0 :(得分:0)

当然:

WHERE 
  (f_date >= :F_DATE_FROM OR :F_DATE_FROM IS NULL) AND
  (f_date <= :F_DATE_TO OR :F_DATE_TO IS NULL) AND
  ...

虽然我不确定它会实现多少性能改进。如果您的查询专门针对性能,请提出一个包含查询计划的问题

相关问题