在oracle10中有两个表(都是300w条记录),表Ta和表Tb,两个都有一个列C,且均建了索引,normal类型索引.
可在两个表关联(select Ta.* from Ta,Tb where Ta.C=Tb.C)时,F5查看执行计划时,看到的都是TABLE ACCESS FULL.没有走索引.
但如果Ta和Tb跟其他的表,关联时,用到索引列的都会走索引,这个是咋回事?

解决方案 »

  1.   

    1、不使用索引的原因是你两个表关联C列符合条件的数据太多,可能超过总表数据量的25%以上,
    则有可能不会使用索引,两表的执行计划将采用hash join方式,不会使用索引。2、如果一个大表和一个较小表连接,就算小表的数据量全部符合条件,从大表中取的数据与
    小表的行数相等。行数会少于大表数据量的25%,这时执行计划可能采用nest loop方式,使用
    小表作为驱动表,使用大表的索引进行嵌套扫描。