一般在10g的时候,开发习惯使用WM_CONCAT进行字符串的拼接,但是该函数效率存在比较大的问题,在12c中甚至移除了该函数。本次在11g环境在对该函数进行测试,并与listagg进行对比。
初始化环境
11g中测试
数据库版本为11.2.0.4.0
对比测试
两个执行计划最明显的区别是listagg不存在db block gets,同时逻辑读和物理读也比较少。
使用runstats_pkg批量测试
创建2个测试存储过程
开始测试
可以看出WM_CONCAT函数的LATCH争用比较厉害,效率较差。
因为函数的内部具体算法看不到,猜想可能是WM_CONCAT遍历算法不够优化吧。
总结
推荐在11g以上版本使用listagg取代WM_CONCAT进行字符串的拼接。
领取专属 10元无门槛券
私享最新 技术干货