当页导航

数据库语句优化

写了一个批量插入的语句,具体格式为select xxyyfrom   a left join b on a.xx = b.xx left join c on b.jj = c.kk where a.yy in('','','')and exists(        select 1 from (xx...))为什么在客户端执行的时候报超时,用脚本执行时一直卡着...显示全部

写了一个批量插入的语句,具体格式为

select

xx

yy

from   a left join b on a.xx = b.xx left join c on b.jj = c.kk

where a.yy in('','','')

and exists(

        select 1 from (

xx...

)

)

为什么在客户端执行的时候报超时,用脚本执行时一直卡着不动?望大神解答

收起
希望获得:具体解决, 注意事项, 原理分析, 通用方法

3回答

仙道彰仙道彰数据库管理员 , IBM
redgreat赞同了此回答
1.可以试着将where里面的条件放在From 和 jion 后面的数据集里面;如 from a  的可以改写成 from ( select * from a where a.yy in ('','',''))  as a ,这样写的好处是可以减小外连接后的数据集的大小(笛卡尔积)的大小 ,类似这种都可以这样子改写;2....显示全部

1.可以试着将where里面的条件放在From 和 jion 后面的数据集里面;如

from a  的可以改写成 from ( select * from a where a.yy in ('','',''))  as a ,这样写的好处是可以减小外连接后的数据集的大小(笛卡尔积)的大小 ,类似这种都可以这样子改写;

2.检查是否建立了索引,尤其是关联条件涉及到的栏位上是否建有索引;如果外层select 的栏位也是高频栏位的话也可以建立下索引;

3.辅助操作: reorg下个table 重组下各表,同时可rustat下个表更新下各表的统计信息有利于优化器的决策;

语法: db2 reorg table xxx.xxxx;

db2 rustat table xxx.xxxx with indexes all ;

收起
答案包含:通用方法 1天前
redgreatredgreat数据库管理员 , leadcom
表关联有点多,先看执行计划该加索引的加加索引;还有就是不行就用临时表,不知道db2sql支持with as不.显示全部

表关联有点多,先看执行计划该加索引的加加索引;还有就是不行就用临时表,不知道db2sql支持with as不.

收起
答案包含:注意事项 6天前
快乐一个胖快乐一个胖软件开发工程师 , 软通动力济南分公司
a.yy in('','','')这个是一个连贯的吗?如果是最好写成between   and如果不是最好也用exists改一下,不然数据量大了,肯定超时显示全部

a.yy in('','','')这个是一个连贯的吗?如果是最好写成between   and

如果不是最好也用exists改一下,不然数据量大了,肯定超时

收起
 1天前

撰写回答

提问者

韦十二软件开发工程师, 某民企
发布1
回答0