外连接+聚合
来源:互联网 发布:java socket链接不上 编辑:程序博客网 时间:2024/06/15 02:35
数据库版本:10205
下面这条SQL执行时间大约为50秒,别名为Q的表大约有30W条数据。
语句如下:
首先看到wm_concat函数,10205以后的版本返回值已经改为CLOB,效率比较低,11GR2已经可以使用listagg进行替换,10205必须要自己创建函数了。
自定义函数如下:
create or replace type str_tab is table of varchar2(4000);CREATE OR REPLACE FUNCTION to_string ( nt_in IN str_tab, delimiter_in IN VARCHAR2 DEFAULT ',' ) RETURN VARCHAR2 IS v_str VARCHAR2(32767); v_dlm VARCHAR2(10);BEGIN v_dlm := delimiter_in; for i in 1..nt_in.count loop v_str := v_str || v_dlm || nt_in(i); end loop; RETURN v_str;END to_string;
执行时间大约是6秒,但仍然不能接受,需继续优化。
把带聚合函数的查询去掉,查询很快,1秒内出结果;把带聚合函数的查询拿出来单独执行,也不是很慢,1秒多点;如果在一起执行,而且不是外连接的情况下,也很快,就是加上外连接后非常慢。
首先想到的是把带聚合函数的查询实体化,使用with as + HINT MATERIALIZE 的方法,结果反而更慢。
后经过大神的提示,考虑更改SQL的逻辑,之前的SQL逻辑是先聚合再表连接,尝试修改为先表连接再聚合。
修改后的SQL一秒内执行完毕。
0 0
- 外连接+聚合
- 聚合 字符串连接
- mysql中字符串聚合连接
- SQL-字符串连接聚合函数
- 用Oracle自定义聚合函数实现字符串连接的聚合
- Oracle自定义聚合函数实现字符串连接的聚合
- 字符串连接聚合函数 几例
- oracle中的连接和分组聚合求最值
- SQL连接查询,子查询,表聚合
- 聚合函数查询、连接查询、子查询
- SqlServerCLR聚合函数:分组连接字符串
- 聚合
- 聚合
- 聚合
- 聚合
- 聚合以及连接以及自动编号的SQL
- Oracle 多行记录合并/连接/聚合字符串
- Oracle 聚合函数解决聚集连接字符串问题
- Android面试之2017美团面试最新
- iOS移动端WebApp的JS与Native交互(JS与OC)
- c语音动态内存分配,内存重新分配,内存释放,指针运算
- 10个值得深思的 PHP 面试问题
- ajax往服务端发送checkbox的数组方式,服务端采用springMVC架构
- 外连接+聚合
- UEStudio快捷键
- 外链接
- C++ 对象的内存布局(下)
- 练习题 No.15 Expedition
- jQuery特性操作
- 北京黑马JavaEE就业班32期
- Swift安装和配置
- 微服务,微架构[三]之springboot集成nosql数据库mongodb