SELECT gzb.GZCLR,mkjb.mkjmc,gzb.LX,gzb.JGLX,gzb.CLJG,gzb.DHHM,gzb.YHMC,gzb.LXDH,gzb.GZXX1,gzb.CLRQ,gzb.CLSJ FROM GZB,DH,MKJB where DH.SSJB=mkjb.mkjh AND DH.dhhm=gzb.dhhm and gzb.ZT='运行' and (gzb.CLRQ between to_date('2008-10-28 ','yy-mm-dd') and to_date('2008-10-28 ','yy-mm-dd')) and gzb.LX='普通' order by GZCLR,mkjb.mkjmc,gzb.LX,gzb.JGLX UNION SELECT gzb.GZCLR,'无' AS MKJMC,gzb.LX,gzb.JGLX,gzb.CLJG,gzb.DHHM,gzb.YHMC,gzb.LXDH,gzb.GZXX1,gzb.CLRQ,gzb.CLSJ FROM GZB where gzb.ZT='运行' and (gzb.CLRQ between to_date('2008-10-28 ','yy-mm-dd') and to_date('2008-10-28 ','yy-mm-dd')) and gzb.dhhm not in (select dhhm from yhxxb) and gzb.LX='普通' order by GZCLR,gzb.LX,gzb.JGLX UNION SELECT gzb.GZCLR,mkjb.mkjmc,gzb.LX,gzb.JGLX,gzb.CLJG,gzb.DHHM,gzb.YHMC,gzb.LXDH,gzb.GZXX1,gzb.CLRQ,gzb.CLSJ FROM GZB,KD,MKJB where KD.SSJB=mkjb.mkjh AND KD.dhhm=gzb.dhhm and gzb.ZT='运行' and (gzb.CLRQ between to_date('2008-10-28 ','yy-mm-dd') and to_date('2008-10-28 ','yy-mm-dd')) and gzb.LX='普通' order by GZCLR,mkjb.mkjmc,gzb.LX,gzb.JGLX UNION SELECT gzb.GZCLR,'无' AS MKJMC,gzb.LX,gzb.JGLX,gzb.CLJG,gzb.DHHM,gzb.YHMC,gzb.LXDH,gzb.GZXX1,gzb.CLRQ,gzb.CLSJ FROM GZB where gzb.ZT='运行' and (gzb.CLRQ between to_date('2008-10-28 ','yy-mm-dd') and to_date('2008-10-28 ','yy-mm-dd')) and gzb.dhhm not in (select dhhm from KD) and gzb.LX='普通' order by GZCLR,gzb.LX,gzb.JGLX对ORACLE不很熟悉?哪位帮我优化优化或者建立索引什么的?
用union肯定慢了。如果语句不好优化的话, 可以考虑把你的拼字符串那段建个函数索引。
如何建立函数索引??我的语句都在上面了,老打帮忙呀?对Oracle不熟悉,但又必须用,是人家的库
你order by 那么多字段。能不满吗。把所有的条件后面的跟order by的字段都建个索引吧。
索引的创建: create unique index idx_stuid on student(stuid);//unique 指明是唯一索引,idx_stuid 索引名,on指明在哪张表上创建,student 表名,stuid 建立索引的列名 组合索引: create index idx_empnoanddepno on emp(empno,deptno); 如何使用: select * from emp where empno=7899 and deptno=10;//当使用的是时候会自动调用该索引以提高查询效率。 位图索引: 适用于重复度比较高的列,例如:职位,颜色等,会引用rowid,直取物理地址,提高查询速度,但bitmap列对应数据条数,不利于查询过长记录条数的表。 索引组织表: create table indorg ( vencode int primary key, venname varchar2(20) ) organization index;//直接在主键上建立索引,查询速度会非常快,但前提是一定要有主键。
都不用order by 感觉也不是很快, UNION是需要的,不能少 整个函数索引怎么弄???可以有明显提高速度吗?
UNION
SELECT gzb.GZCLR,'无' AS MKJMC,gzb.LX,gzb.JGLX,gzb.CLJG,gzb.DHHM,gzb.YHMC,gzb.LXDH,gzb.GZXX1,gzb.CLRQ,gzb.CLSJ FROM GZB where gzb.ZT='运行' and (gzb.CLRQ between to_date('2008-10-28 ','yy-mm-dd') and to_date('2008-10-28 ','yy-mm-dd')) and gzb.dhhm not in (select dhhm from yhxxb) and gzb.LX='普通' order by GZCLR,gzb.LX,gzb.JGLX
UNION
SELECT gzb.GZCLR,mkjb.mkjmc,gzb.LX,gzb.JGLX,gzb.CLJG,gzb.DHHM,gzb.YHMC,gzb.LXDH,gzb.GZXX1,gzb.CLRQ,gzb.CLSJ FROM GZB,KD,MKJB where KD.SSJB=mkjb.mkjh AND KD.dhhm=gzb.dhhm and gzb.ZT='运行' and (gzb.CLRQ between to_date('2008-10-28 ','yy-mm-dd') and to_date('2008-10-28 ','yy-mm-dd')) and gzb.LX='普通' order by GZCLR,mkjb.mkjmc,gzb.LX,gzb.JGLX
UNION
SELECT gzb.GZCLR,'无' AS MKJMC,gzb.LX,gzb.JGLX,gzb.CLJG,gzb.DHHM,gzb.YHMC,gzb.LXDH,gzb.GZXX1,gzb.CLRQ,gzb.CLSJ FROM GZB where gzb.ZT='运行' and (gzb.CLRQ between to_date('2008-10-28 ','yy-mm-dd') and to_date('2008-10-28 ','yy-mm-dd')) and gzb.dhhm not in (select dhhm from KD) and gzb.LX='普通' order by GZCLR,gzb.LX,gzb.JGLX对ORACLE不很熟悉?哪位帮我优化优化或者建立索引什么的?
可以考虑把你的拼字符串那段建个函数索引。
如何建立函数索引??我的语句都在上面了,老打帮忙呀?对Oracle不熟悉,但又必须用,是人家的库
create unique index idx_stuid on student(stuid);//unique 指明是唯一索引,idx_stuid 索引名,on指明在哪张表上创建,student 表名,stuid 建立索引的列名
组合索引:
create index idx_empnoanddepno on emp(empno,deptno);
如何使用:
select * from emp where empno=7899 and deptno=10;//当使用的是时候会自动调用该索引以提高查询效率。
位图索引:
适用于重复度比较高的列,例如:职位,颜色等,会引用rowid,直取物理地址,提高查询速度,但bitmap列对应数据条数,不利于查询过长记录条数的表。
索引组织表:
create table indorg
(
vencode int primary key,
venname varchar2(20)
) organization index;//直接在主键上建立索引,查询速度会非常快,但前提是一定要有主键。
都不用order by 感觉也不是很快,
UNION是需要的,不能少
整个函数索引怎么弄???可以有明显提高速度吗?