在bbb中先建立一个id索引,用下面的试试
select * from aaa,bbb where bbb.id=aaa.id
最好安装一个sql expert for oracle软件,它可以自动优化sql语句
select * from aaa,bbb where bbb.id=aaa.id
最好安装一个sql expert for oracle软件,它可以自动优化sql语句
解决方案 »
- 怎么在某Schame下搜索数据
- 怎样通过视图或者存储过程显示表信息?
- 请教SQL文。
- 存储过程的求助
- 关于索引的性能问题
- oracle 局域网连接,开启防火墙后 1521端口无法访问,,求大神们帮助
- 抓狂!!我的%oraclehome%\network\admin目录下没有sqlnet.ora!!!
- 想列出所有User的权限,怎么写Sql?? (在线!)
- 求助各位大虾:删除重复数据 急!!!
- 如何将表空间的管理由本地管理修改成字典管理(马上解决马上给分)
- 在SCO5.04中安装ORACLE7.3.2出错,快来指教啊?
- 怎么把建好的数据表从家里的电脑用移动硬盘拷到的电脑上?公司是Oracle 9i企业版,家里的是从Oracle网站得下载的个人版。
exists要比in的速度快许多。你可以看看相关资料。
SELECT AAA.* FROM AAA, BBB WHERE AAA.ID=B.ID,这样就可以用上索引了,查询也应当很快了~
不完全同意 yjmfdm的观点. 关于Exist, IN的效率比较,ASKTOM.ORACLE.COM上有相关文章.
结论是:
内查询为小表, 外查询为大表时, 用 IN 的效率高一些
反之,内查询为大表, 外查询为小表时, 用 Exist 的效率高一些 这些TOM都给出了测试数据,大家有时间去看看.
select * from BBB,AAA where BBB.id=AAA.id
[email protected] >select count(*) from emp; COUNT(*)
----------
[email protected] >create index ind_dept_deptno on dept(deptno);索引已创建。[email protected] >analyze table dept compute statistics for table for all indexes;表已分析。[email protected] >set timing [email protected] >analyze table emp compute statistics;表已分析。已用时间: 00: 01: 03.02
[email protected] >select count(*) from emp where deptno in (select deptno from dept); COUNT(*)
----------
786432已用时间: 00: 00: 09.06Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=899 Card=1 Bytes=15)
1 0 SORT (AGGREGATE)
2 1 NESTED LOOPS (SEMI) (Cost=899 Card=1572864 Bytes=23592960)
3 2 TABLE ACCESS (FULL) OF 'EMP' (Cost=899 Card=1572864 Bytes=3145728)
4 2 INDEX (RANGE SCAN) OF 'IND_DEPT_DEPTNO' (NON-UNIQUE)[email protected] >select count(*) from emp,dept where emp.deptno=dept.deptno; COUNT(*)
----------
786432已用时间: 00: 00: 09.02Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=899 Card=1 Bytes=15)
1 0 SORT (AGGREGATE)
2 1 NESTED LOOPS (Cost=899 Card=1572864 Bytes=23592960)
3 2 TABLE ACCESS (FULL) OF 'EMP' (Cost=899 Card=1572864 Bytes=3145728)
4 2 INDEX (RANGE SCAN) OF 'IND_DEPT_DEPTNO' (NON-UNIQUE)[email protected] >create index ind_emp_deptno on emp(deptno);索引已创建。已用时间: 00: 00: 35.03
[email protected] >analyze table emp compute statistics for table for all indexes;表已分析。已用时间: 00: 00: [email protected] >insert into emp (empno) values(1); -- 这样emp.deptno就有为 null 的情况已创建 1 行。 [email protected] >select /*+ use_hash(emp dept) */ count(*) from emp,dept where emp.deptno=dept.deptno; COUNT(*)
----------
786432已用时间: 00: 00: 02.05Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=308 Card=1 Bytes=15)
1 0 SORT (AGGREGATE)
2 1 HASH JOIN (Cost=308 Card=1572864 Bytes=23592960)
3 2 INDEX (FULL SCAN) OF 'IND_DEPT_DEPTNO' (NON-UNIQUE) (Cost=1 Card=4 Bytes=52)
4 2 INDEX (FAST FULL SCAN) OF 'IND_EMP_DEPTNO' (NON-UNIQUE) (Cost=297 Card=1572864 Bytes
=3145728)[email protected] >select /*+ rule */ count(*) from emp,dept where emp.deptno=dept.deptno; COUNT(*)
----------
786432已用时间: 00: 00: 01.09Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=HINT: RULE
1 0 SORT (AGGREGATE)
2 1 NESTED LOOPS
3 2 TABLE ACCESS (FULL) OF 'DEPT'
4 2 INDEX (RANGE SCAN) OF 'IND_EMP_DEPTNO' (NON-UNIQUE)优化器没选择正确的驱动表吧
反之,内查询为大表, 外查询为小表时, 用 Exist 的效率高一些尽量少用关联
嵌套比关联效率要高一些象 select * from aaa,bbb where aaa.id=bbb.id 等语句效率极低