我一直在我的 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
答案 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
...
虽然我不确定它会实现多少性能改进。如果您的查询专门针对性能,请提出一个包含查询计划的问题