oracle的执行过程:
先取得outer table即table2,
然后对于table2的每一条数据,到inner table (table1)中去找因此,如果table1比较小的话,上面的计划没有问题
如果table1比table2大,try:
select a.a1,a.a2,count(*) from table 2 b,table1 a where a.xh=b.xh and a.rq<to_date('2004.1.1','yyyy.mm.dd') and b.rq1<to_date('2004.1.1','yyyy.mm.dd');看执行计划是否有所改变,然后看一下效率会不会提高。
先取得outer table即table2,
然后对于table2的每一条数据,到inner table (table1)中去找因此,如果table1比较小的话,上面的计划没有问题
如果table1比table2大,try:
select a.a1,a.a2,count(*) from table 2 b,table1 a where a.xh=b.xh and a.rq<to_date('2004.1.1','yyyy.mm.dd') and b.rq1<to_date('2004.1.1','yyyy.mm.dd');看执行计划是否有所改变,然后看一下效率会不会提高。
解决方案 »
- orcal数据恢复
- 要不就是思路错了--解析excel公式续
- 请问ORA-06000:internal error code,arguments:[12261]错误怎么处理!
- 能否用SQL查询语句实现入下功能的查询(困扰我好多年了)
- 一个比较复杂的层次查询
- 访问另一个用户的表
- oracle中如何按日期查找记录
- Oracle能在win2k Profession 下装吗?
- ★★procedure能调用function吗?★★
- 请问oracle的imp怎么更改导入目的地的表空间啊
- 求救!procedure中的问题。在线等,急。
- 错误PLS-00201: identifier 'SYS.V_$SESSION' must be declared
bzszp(SongZip) 我不同意你的观点,我觉的表大的应该放在前面,如果后面的话,那不是要全表扫描了吗?
还有,对于a.xh=b.xh放在where前还是后,我觉的应该在后,可是网上好多人讲在前面。
还有可以避免后面的表全表搜索吗?
不知道是不是cbo方式,如果是cbo的话,oracle会根据实际情况对连接顺序进行调整,
选择最佳的连接顺序以及join方式。上面的意思是,你改变一下连接顺序,看执行计划是否有所改变。
CCDJRQ<to_date('2004-06-20','yyyy/mm/dd')+1 and
not (ZT like '%B%' or ZT like '%E%' or ZT like '%M%') and clly='1' group by Cllx,xzqh
估计100万的数据量。使用了复合索引了,但是查询结果还是要6分钟
sort_area_size=20m
1.select count(*) from table1 where rq<to_date('2004.1.1','yyyy.mm.dd') 2.select count(*) from table2 b where rq1<to_date('2004.1.1','yyyy.mm.dd')
执行计划当然是用上了index了,这个是肯定的啊。