在SQL查询时,SQL语句中由于使用了 IS NOT NULL ,导致查询时间过长,数据表有180W条数据,查询的字段上已经有普通索引,我们使用简单的sql查询这个cfErpPayNumber 不是空的记录,耗时需要1843ms,这是非常头疼的,
查看执行计划,是全表扫描
这里为了加快查询效率,我们需要加入函数索引,
函数索引是Oracle数据库中的一种特殊类型的索引,它允许基于表达式或函数的结果创建索引。与传统的基于列的索引不同,函数索引可以包含对列执行的操作结果,例如大写转换、数学计算或其他复杂的表达式。
主要特点:
1、提高查询性能:通过在查询中使用函数索引,可以显著提高涉及复杂表达式的查询性能。
2、支持复杂表达式:可以在索引中包含对列的函数调用或表达式,而不仅仅是列本身。
3、透明性:对于应用程序来说,函数索引的存在是透明的,即不需要修改查询语句来利用这些索
这里我们加入一个函数索引后再去查询,仅仅耗时 34 ms,相比原来的1800ms提升相当大,
查看执行计划,可以看到走的是我们刚才创建的函数索引
NVL2(表达式1,表达式2,表达式3)
如果表达式1为空,返回值为表达式3的值。如果表达式1不为空,返回值为表达式2的值。
例如 NVL2(comm,'sal+comm',sal)
NVL2函数测试comm
如果comm为空,就返回sal 的值。如果 comm 不为空(null),就返回表达式 sal+comm的值。
如果我们希望用普通的字段查,也可以继续加普通的索引