1.外层、内层就象嵌套循环的外层循环和内层循环一样。2.聚集索引是在聚集上建立的,一般的索引都是非聚集索引,查查书就可以了解了。3.其实分析已经写得很清楚了card表的记录远远小于account表,再多加了个条件,速度当然大大提高。你只要理解了1,这些就清楚了。

解决方案 »

  1.   

    那么从sql语句怎么分辨哪个表是外层表,哪个是内层表,还是没搞清楚?还有究竟是外层表大好,还是内层表大好,为什么?
      

  2.   

    内层还是外层是在Oracle执行SQL时决定的,一般是外层表(有时也称主表)小好了。就拿你的第二个SQL语句来说,根据where条件,需要扫描card或account表,既然你的card表小得多,Oracle就选择card表作为外层表,这样I/O次数或者说扫描的次数为外层表card的7896行 + 外层表card的7896行*内层表account上对应外层表每一行当然比以account表作索引,要扫描
    外层表account的191122行 + 外层表account的191122行*内层表card上对应外层表的一行快很多了。
      

  3.   

    谢谢楼上2位,
    我现在还有一个问题想问问大家:
    1。  select count(id) from table1 where 条件;
    这条sql 语句需要对这个表进行表扫描;2。  select id from table1 where 条件;假如这个2条sql语句是对同一个表table1,条件也一样,我想问问,这2条sql语句,那条sql快些,还是一样,为什么??
    谢谢!