select a.no,b.name from a,b where a.id=b.id;
select a.no,b.name from b,a where a.id=b.id;这两个sql应该分别会编译产生如下描述的语句:
1、循环a表的每一条记录,根据当天行的a.id去查找b表中相同的b.id,然后...
2、循环b表的每一条记录,根据当天行的b.id去查找b表中相同的a.id,然后...
这是由于from后边表的排列顺序造成的,同样的where后边的多条件也会有相似的情况
如果b.id有索引,自然1就会比较快,尤其是a表的记录比较少的时候更为显著
如果条件中写成外连接的样子,相当于可以强制产生一某个表为主循环,去查询另外一个表的记录
select a.no,b.name from b,a where a.id=b.id;这两个sql应该分别会编译产生如下描述的语句:
1、循环a表的每一条记录,根据当天行的a.id去查找b表中相同的b.id,然后...
2、循环b表的每一条记录,根据当天行的b.id去查找b表中相同的a.id,然后...
这是由于from后边表的排列顺序造成的,同样的where后边的多条件也会有相似的情况
如果b.id有索引,自然1就会比较快,尤其是a表的记录比较少的时候更为显著
如果条件中写成外连接的样子,相当于可以强制产生一某个表为主循环,去查询另外一个表的记录
解决方案 »
- 来五道题
- oracle PL/SQL 开发
- SQL某一字段单元格里有重复的如何查询出来???
- Oracle表导入Access 代码实现
- 动态生成SQL后,如何取值
- 为何Oracle数据库表空间的一个datafilw使有空间为负值?
- 50分求LINUX下的数据库建模工具,类似于POWER DESIGNER。
- 查找记录中含有%或'的记录
- 请问各位大侠!!我怎么在过程中无法访问sys.dba_data_files这个表呢.用单独的SQL语句都可以查看!(都在同一用户下)
- 错误'ORA-01779:无法修改与非键值保存表对应的列.'如何解决?
- 关于C#+Oracle的初级问题
- 如何建立客户机和服务器之间的Oracle链接
2、索引范围值有多大?如果索引范围值大于40%,建议用全表扫描
3、既然B表有索引,WHERE语句最好写成b.id=a.id 。当两个表都有索引时,两种写法的执行计划是完全不一样的,楼主可以测试一下