为什么连接中的表没有使用索引?

[复制链接]
查看11 | 回复9 | 2005-7-16 18:49:11 | 显示全部楼层 |阅读模式
表A001与A002都有主键
select a.id,a.name,b.age from a001 a,a002 b where a.id=b.id
通过AutoTrace发现A002没有使用索引!
select a.id,a.name,b.age from a002 b,a001 a where b.id=a.id
通过AutoTrace发现A001没有使用索引!
为什么?难道连接就是这样的吗?
为什么右边的一个表不使用索引?
注:这两个表中数据量不太100条以内。
回复

使用道具 举报

千问 | 2005-7-16 18:49:11 | 显示全部楼层
为什么没有人解释,难道很难吗?
回复

使用道具 举报

千问 | 2005-7-16 18:49:11 | 显示全部楼层
谁规定一定要使用索引的?
查看执行计划。
回复

使用道具 举报

千问 | 2005-7-16 18:49:11 | 显示全部楼层
如果你本人是oracle内部那个优化器, 你会怎么做? 会两个表都查找索引吗?
回复

使用道具 举报

千问 | 2005-7-16 18:49:11 | 显示全部楼层
可是我在SQL中就看到使用了索引,为什么ORACLE不呢?
回复

使用道具 举报

千问 | 2005-7-16 18:49:11 | 显示全部楼层
据有关资料讲,连接的字段一般要建索引。
就因为我查看了执行计划,才知道ORACLE在连接中没有使用两个表的索引?
回复

使用道具 举报

千问 | 2005-7-16 18:49:11 | 显示全部楼层
100条记录,全表扫描都可能大于索引扫描
把你的执行计划贴出来看看
回复

使用道具 举报

千问 | 2005-7-16 18:49:11 | 显示全部楼层
已选择1000行。

Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE
10 NESTED LOOPS
21 TABLE ACCESS (FULL) OF 'A001'
31 TABLE ACCESS (BY INDEX ROWID) OF 'A002'
43 INDEX (UNIQUE SCAN) OF 'PK_002_ID' (UNIQUE)
回复

使用道具 举报

千问 | 2005-7-16 18:49:11 | 显示全部楼层
我们来举个例子:
如果要你比较两本词典对每个词的解释的异同, 你会怎么做?
要是我的话, 会不使用索引遍历第一个词典的所有词, 然后针对每个词, 在第二本词典中通过索引快速定位到相应的词条.
这里, 我看不出对第一本词典也使用索引会有任何好处.
换一种情况: 如果要比较某个特定词在两本词典中的解释的异同, 那么我会在两本词典中都使用索引快速定位的.
回复

使用道具 举报

千问 | 2005-7-16 18:49:11 | 显示全部楼层
同意oldwain的看法,也谢谢以上各位。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行