现在有张表tchest,里面的数据是9999999,表中的fsrc都是1234,表中的fcode是主键,
我两条SQL语句:
一、select max(c.fcode) from tchest c;
二、select max(c.fcode) from tchest c where c.fsrc = '1234';
从数据上来看,这个where条件加不加都是可以的用第一条语句执行速度很快,零点几秒就可以了,
用第二条语句执行的时候,半分钟都没有结果出来。我看了下执行计划,
第一条语句写的是INDEX FULL SCAN(MIN/MAX);
第二条语句写的是TABLE ACCESS FULL我就算在fsrc上加索引,执行效果还是一样的……哪位来告诉俺一下,这是咋回事呀

解决方案 »

  1.   

    执行计划是第一条语句写的是INDEX   FULL   SCAN(MIN/MAX); 
    第二条语句写的是TABLE   ACCESS   FULL 
      

  2.   

    执行计划是第一条语句写的是INDEX   FULL   SCAN(MIN/MAX); 
    第二条语句写的是TABLE   ACCESS   FULL 
      

  3.   

    一.无需解释,主键索引搜索
    二.既然你的表字段fsrc都是1234,那么你的条件where   c.fsrc   =   '1234';还有意义么?岂不是每行
    数据的内容都满足你的条件?即使你在这个字段上加了一个索引,索引里面也只是只有一条1234而已,所以
    执行计划就全表Access了
    补充一点,SQL文执行顺序是从右往左的
      

  4.   

    是因为你用数据类型的fsrc字段,但是用字符类型作为条件‘1234’。导致索引不可用。