记Oracle regexp_substr 一拆多查询缓慢sql优化

本文探讨了如何通过优化正则表达式和连接by查询,提升从Oracle数据库中按分号拆分字符串的SQL性能。作者分享了从多次尝试到最终闪电执行的历程,包括使用LENGTH函数替代正则、引入DUAL表减少递归层数,以及处理多余空白记录的方法。
摘要由CSDN通过智能技术生成

需求简化描述:

Oralce 一条数据按照特定格式拆分成多行数据
如:1;2;3
拆分成:
1
2
3
源数据如图:数据样例如图

最开始我是这么写的


	SELECT DISTINCT
		REGEXP_SUBSTR( hscbzx, '[^;]+', 1, ROWNUM ) 
	FROM
		yszx
	WHERE
		id = '"+yszxId+"' 
		connect by LEVEL <=regexp_count(hscbzx, ';') + 1

执行速度惨不忍睹,直接创造纪录,去网上查了下,解释说是regexp_substr regexp_count ,都使用了正则,正则功能强大,但效率很低,然后还用了connect by 递归查询~,检查了下sql,把connect by 后面的regexp_count 优化了下,如下

改成了这样


	SELECT DISTINCT
		REGEXP_SUBSTR( hscbzx, '[^;]+', 1, ROWNUM ) 
	FROM
		yszx
	WHERE
		id = '"+yszxId+"' 
		connect by LEVEL <=LEN
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值