CREATE OR REPLACE VIEW system.V_MOM30100_ALL AS
SELECT no, refno, rwh, gzh, type, refseq, jh, jhname, gxh, gxdh, num, cjgd, operator,
operatorname, creater, , sj, createtime, usefix, usefixname, pays, planfinish,
factfinish,pzrw,delx
FROM system.mom30100
UNION
SELECT no, refno, rwh, gzh, type, refseq, jh, jhname, gxh, gxdh, num, cjgd, operator,
operatorname, creater, , sj, createtime, usefix, usefixname, pays, planfinish,
factfinish,pzrw,delx
FROM mom30100_bak;
---------------这个视图大约100万条数据、
CREATE OR REPLACE VIEW system.V_MOM30101_ALL AS
SELECT no, seq, num, invalidnum, creater, checker, checkname, sj, createtime, facthours,
pays, finish, serial,readytime ,readycontent ,stoptime ,stopreason,ccreason,invalidreason
FROM SYSTEM.mom30101unionSELECT no, seq, num, invalidnum, creater, checker, checkname, sj, createtime, facthours,
pays, finish, serial,readytime ,readycontent ,stoptime ,stopreason,ccreason,invalidreason
FROM SYSTEM.mom30101_bak;---------------这个视图大约100万条数据
CREATE OR REPLACE VIEW system.V_工序明细表_ALL AS
SELECT 任务号 , 工装号, 件号, 工序号, 工序名称, system.left(工序内容,250) as 工序内容, 单件定额, 实际件数, 工作者, 检验员,
加工使用设备, 开始时间, 结束时间, 实做工时, 录入员, 合格标识, 不合格次数,
导致零件报废否, 备注, Wwbz, Wwhm, Hwbz, Hwhm, de_lx, finish,invalid,yjm,ejm,sjm,gyghljh,gyghgxh,jyde,ifcheck
FROM system.工序明细表
UNION
SELECT 任务号, 工装号, 件号, 工序号, 工序名称, system.left(工序内容,250) as 工序内容, 单件定额, 实际件数, 工作者, 检验员,
加工使用设备, 开始时间, 结束时间, 实做工时, 录入员, 合格标识, 不合格次数,
导致零件报废否, 备注, Wwbz, Wwhm, Hwbz, Hwhm, de_lx, finish,invalid,yjm,ejm,sjm,gyghljh,gyghgxh,jyde,ifcheck
FROM system.工序明细表_bak;
-------------------------这个视图100多万条数据select '','','',operatorlist.operator,operatorlist.operatorname ,
sum(degs - coalesce(infactbonus,0)),ls_dt,
mom20100.zzgd,coalesce(v_工序明细表_all.de_lx,' '),coalesce(v_mom30100_all.pzrw,'6')
from operatorlist,v_mom30101_all ,v_mom30100_all ,mom20100,v_工序明细表_all,任务分配表
where coalesce(balance,'0')='0' and v_mom30101_all.no =operatorlist.no and v_mom30101_all.no =v_mom30100_all.no and
v_工序明细表_all.任务号=v_mom30100_all.rwh and v_工序明细表_all.工装号=v_mom30100_all.gzh and v_工序明细表_all.件号=v_mom30100_all.jh and v_工序明细表_all.工序号=v_mom30100_all.gxh and
v_mom30100_all.refno = mom20100.momno and v_mom30100_all.refseq = mom20100.seq and v_mom30100_all.type = mom20100.type
and mom20100.gxh = v_mom30100_all.gxh and mom20100.type='3' and
v_mom30101_all.seq =operatorlist.seq and to_char(v_mom30101_all.sj,'yyyy-mm')='2008-05' and mom20100.zzgd like '041' and operatorlist.operator like '%' group by mom20100.zzgd,operatorlist.operator,operatorlist.operatorname,coalesce(v_工序明细表_all.de_lx,' '),v_mom30100_all.pzrw;
---其中的operatorlist与mom20100都100多万数据量 这个查询非常的慢 查询很久都不出来 有什么好办法解决下
SELECT no, refno, rwh, gzh, type, refseq, jh, jhname, gxh, gxdh, num, cjgd, operator,
operatorname, creater, , sj, createtime, usefix, usefixname, pays, planfinish,
factfinish,pzrw,delx
FROM system.mom30100
UNION
SELECT no, refno, rwh, gzh, type, refseq, jh, jhname, gxh, gxdh, num, cjgd, operator,
operatorname, creater, , sj, createtime, usefix, usefixname, pays, planfinish,
factfinish,pzrw,delx
FROM mom30100_bak;
---------------这个视图大约100万条数据、
CREATE OR REPLACE VIEW system.V_MOM30101_ALL AS
SELECT no, seq, num, invalidnum, creater, checker, checkname, sj, createtime, facthours,
pays, finish, serial,readytime ,readycontent ,stoptime ,stopreason,ccreason,invalidreason
FROM SYSTEM.mom30101unionSELECT no, seq, num, invalidnum, creater, checker, checkname, sj, createtime, facthours,
pays, finish, serial,readytime ,readycontent ,stoptime ,stopreason,ccreason,invalidreason
FROM SYSTEM.mom30101_bak;---------------这个视图大约100万条数据
CREATE OR REPLACE VIEW system.V_工序明细表_ALL AS
SELECT 任务号 , 工装号, 件号, 工序号, 工序名称, system.left(工序内容,250) as 工序内容, 单件定额, 实际件数, 工作者, 检验员,
加工使用设备, 开始时间, 结束时间, 实做工时, 录入员, 合格标识, 不合格次数,
导致零件报废否, 备注, Wwbz, Wwhm, Hwbz, Hwhm, de_lx, finish,invalid,yjm,ejm,sjm,gyghljh,gyghgxh,jyde,ifcheck
FROM system.工序明细表
UNION
SELECT 任务号, 工装号, 件号, 工序号, 工序名称, system.left(工序内容,250) as 工序内容, 单件定额, 实际件数, 工作者, 检验员,
加工使用设备, 开始时间, 结束时间, 实做工时, 录入员, 合格标识, 不合格次数,
导致零件报废否, 备注, Wwbz, Wwhm, Hwbz, Hwhm, de_lx, finish,invalid,yjm,ejm,sjm,gyghljh,gyghgxh,jyde,ifcheck
FROM system.工序明细表_bak;
-------------------------这个视图100多万条数据select '','','',operatorlist.operator,operatorlist.operatorname ,
sum(degs - coalesce(infactbonus,0)),ls_dt,
mom20100.zzgd,coalesce(v_工序明细表_all.de_lx,' '),coalesce(v_mom30100_all.pzrw,'6')
from operatorlist,v_mom30101_all ,v_mom30100_all ,mom20100,v_工序明细表_all,任务分配表
where coalesce(balance,'0')='0' and v_mom30101_all.no =operatorlist.no and v_mom30101_all.no =v_mom30100_all.no and
v_工序明细表_all.任务号=v_mom30100_all.rwh and v_工序明细表_all.工装号=v_mom30100_all.gzh and v_工序明细表_all.件号=v_mom30100_all.jh and v_工序明细表_all.工序号=v_mom30100_all.gxh and
v_mom30100_all.refno = mom20100.momno and v_mom30100_all.refseq = mom20100.seq and v_mom30100_all.type = mom20100.type
and mom20100.gxh = v_mom30100_all.gxh and mom20100.type='3' and
v_mom30101_all.seq =operatorlist.seq and to_char(v_mom30101_all.sj,'yyyy-mm')='2008-05' and mom20100.zzgd like '041' and operatorlist.operator like '%' group by mom20100.zzgd,operatorlist.operator,operatorlist.operatorname,coalesce(v_工序明细表_all.de_lx,' '),v_mom30100_all.pzrw;
---其中的operatorlist与mom20100都100多万数据量 这个查询非常的慢 查询很久都不出来 有什么好办法解决下
解决方案 »
- ORACLE如何在SELECT中构建常量临时表
- 关于oracle11g(win2003)内存管理的问题!
- 如何判断A表中几个字段的数据在B表中存不存在
- Oracle10g 如何规划一个数据库呢?
- 看看OracleServiceXXXX服务会自动停止,实在是找不出原因,快急疯了!!!
- 菜鸟求救ORACLE10启动的问题
- 这句Oracle的存储过程如何用 MS-SQL Server的SQL脚本描述啊?
- 那位大虾能给我讲讲存储过程及它的调用!!
- 在oracle中 execute immediate 能返回成功失败等信息吗
- 用managment server备份时遇到的问题,请高手解答!!!
- oracle transparent gateway 连 5个库
- 停机时间延续性问题
当时我删除了基表的统计信息,然后就OK了analyze table 基表 delete statistics;analyze table 基表 compute statistics ;你可以试试!
CREATE OR REPLACE VIEW system.V_MOM30100_ALL AS
SELECT no, refno, rwh, gzh, type, refseq, jh, jhname, gxh, gxdh, num, cjgd, operator,
operatorname, creater, , sj, createtime, usefix, usefixname, pays, planfinish,
factfinish,pzrw,delx
FROM system.mom30100
UNION
SELECT no, refno, rwh, gzh, type, refseq, jh, jhname, gxh, gxdh, num, cjgd, operator,
operatorname, creater, , sj, createtime, usefix, usefixname, pays, planfinish,
factfinish,pzrw,delx
FROM mom30100_bak;
---------------这个视图大约100万条数据、
比方说这个视图 我就要执行
analyze table system.mom30100
delete statistics;analyze table system.mom30100
compute statistics ;
analyze table system.mom30100_bak
delete statistics;analyze table system.mom30100_bak
compute statistics
是这个意思吗
引用 1 楼 gelyon 的回复:
我遇到过,单独查询视图很快,但是两个SQL语句查询同一个视图后再联合查询就慢了
当时我删除了基表的统计信息,然后就OK了analyze table 基表 delete statistics;analyze table 基表 compute statistics ;你可以试试!你的这2个语句是删除什么的啊 是2个都要执行吗
……对的,就是删除你基表的统计信息,然后重新手动统计一次,看看怎么样?
我问下 然后重新手动统计一次是什么意思啊 我现在查询时快了 怎么都没数据了呢
这两个语句 究竟是做什么的啊 谁知道 给我讲下 谢谢
我想再请教下
analyze table 基表 delete statistics;analyze table 基表 compute statistics ;这2个具体都做了什么 为什么这么处理之后 速度超慢的问题就解决了
还有就是这2个语句是一次执行就完事 还是说以后慢了 还要这么执行啊 因为我的数据库是从sql server 2000导到oracle里的 自己又补得主键 我实在想不通为什么这么处理就解决问题了呢
analyze table 基表 delete statistics;
--分析表 分析时间不保存到user_tables的last_analyzedanalyze table 基表 compute statistics ;--分析表 保存到user_tables
2 / NUM_ROWS BLOCKS EMPTY_BLOCKS
---------- ---------- ------------
4 1 0SQL> analyze table TB1 compute statistics
2 /表已分析。SQL> select num_rows,blocks,empty_blocks from user_tables where table_name='TB1'
2 / NUM_ROWS BLOCKS EMPTY_BLOCKS
---------- ---------- ------------
4 1 6
如果你表的统计信息过旧了,那么Oracle在选择执行计划的时候就有可能选择错误的执行计划,导致效率比较低。
那两个语句的目的就是让Oracle重新去收集表的统计信息,Oracle的优化器会根据这个统计信息来选择不同的执行计划。
关于这部分内容,你可以网上收集下资料慢慢研究研究。
http://blog.chinaunix.net/u2/60332/showart_495441.html
SELECT * FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'GATHER_STATS_JOB';如下是《Performance Tuning Guide》里的内容
14.2.1 GATHER_STATS_JOB
Optimizer statistics are automatically gathered with the job GATHER_STATS_JOB. This job gathers statistics on all objects in the database which have:
?Missing statistics
?Stale statisticsThis job is created automatically at database creation time and is managed by the Scheduler. The Scheduler runs this job when the maintenance window is opened. By default, the maintenance window opens every night from 10 P.M. to 6 A.M. and all day on weekends.
The GATHER_STATS_JOB job gathers optimizer statistics by calling the DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC procedure. The GATHER_DATABASE_STATS_JOB_PROC procedure collects statistics on database objects when the object has no previously gathered statistics or the existing statistics are stale because the underlying object has been modified significantly (more than 10% of the rows).