Book表中有30个字段,5万条记录,在三个字段上建了索引,在pl/sql中查询时候需要等待25秒才能看到结果,而把后面的排序order by uId去掉,能够马上显示,用explain plan查看cost的值分别为28275 和 162,为什么排序查询需要这么久?高人来分析一下

解决方案 »

  1.   

    order by 需要把所有数据读取出来,然后一个个排序,速度当然慢了。直接读的外,只是读取第一个block,速度当然快。不要动不动用explain plan。这个问题只需要一点点常识而已。
      

  2.   

    排序成千上万的纪录,再快都有限。不是必要最好少用order by。
      

  3.   

    oracle 的取数据功能是在SGA内存区完成的。这个完成的时间是你不加order by 的时间。对于order by ,oracle 是不在SGA中做,是在PGA是做,如果数据量大,就会占用临时表空间,排完后,再释放表空间。所以,如果排序的时间太长,可以适当增加临时表空间。
      

  4.   

    要提高排序速度,方法之一就是修改sort_area_size这样的参数,不过提高也是有限的,关键还是应用设计。
      

  5.   

    UID上有没有建立索引啊。对于你这个建立索引应该有影响。
      

  6.   

    Uid 上建了索引,测试时候将索引建在Book表所在的表空间,又尝试将索引建立在单独的表空间,查询还是很慢
      

  7.   

    whqcfp(whqcfp) 说的没错, 顶一下