SQL优化| IS NOT NULL 优化与 NOT NULL 查询慢优化

在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的值。

如果我们希望用普通的字段查,也可以继续加普通的索引,然后使用EXISTS 来过滤

 

 


 

posted @   凉了记忆  阅读(95)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示