日期:2014-05-17  浏览次数:20813 次

oracle两个表关联字段都要建立索引吗?
oracle有A表、B表,A、B通过AID和BID来关联,查询语句大概可以这么写 select A.f1,B.f2,A.f3 from A,B where A.AID=B.BID,假如A表有200w条记录,B表有300条记录,那么为了提高查询速度,建立索引,这两个表的外键都要建吗?还是只建一个?如果建一个的话?建哪个表的呢?

------解决方案--------------------
建外键没必要啊,你关联表查询做多的那几个字段和主键字段简历索引就行了 
------解决方案--------------------
B表只有300条记录,用不着建索引
A表数据200w,肯定要建索引的。
你可以看下执行计划,一定要保证大表是走索引的。
------解决方案--------------------
我觉得,要速度快不该只想着索引。
把一个表看作一个列表,遍历看作for循环print,索引相当于二分查找。
模拟程序计算时间复杂度,在各种算法中选最优,然后让执行计划符合你的算法,不符合就加hint。
------解决方案--------------------
引用:
Quote: 引用:

B表只有300条记录,用不着建索引
A表数据200w,肯定要建索引的。
你可以看下执行计划,一定要保证大表是走索引的。

如果建了索引而执行计划不走索引怎么办啊?


不走索引也正常,走索引在很多情况下不一定比走全表更快,因为索引是需要排除空\需要回表的,因此具体的应该看几种方式的开销,选择开销最小的.