表中共有36个字段(其它表汇总至该表)主键: EntID
索引: EntName当我执行  select EntName,EntNo from XXXXX where entname like '%济南%' 效率挺高 1s以内就可以查询出来.
但执行 select count(entid) from XXXXX where entname like '%济南%' 却需要66s请问高手有什么办法可以解决此问题???
在线等~~~

解决方案 »

  1.   

    看看两个执行计划的区别:set autot on
    select .....把输出的结果帖出来.
      

  2.   

    如果entid没有空值.select count(1) from XXXXX where entname like '%济南%'个人认为你的时间是耗在entname like '%济南%'上.
      

  3.   

    count(*) 试试看理论上不应该
      

  4.   

    select EntName,EntNo from XXXXX where entname like '%济南%'之所以效率高是因为oracle找到第一条数据就返回给你了,其它的还在继续查,实际上并没有全部查出来。而select count(entid) from XXXXX where entname like '%济南%'之所以慢是它必须把所有结果都查出来,并汇总后才返回给你。故时间长。因为entid是主键,所以可以优化为如下,效率会更高:select count(0) from XXXXX where entname like '%济南%'
      

  5.   

    执行 select count(0) from xxxxx 速度也挺慢,早上用上97s才完成. 记录数是100199条
      

  6.   

    因为select count(0) from xxxxx需要full scan xxxxx的主键,并汇总.
      

  7.   

    select /*+parallel(a,4)*/count(entid) from XXXXX a where entname like '%济南%'
    有多个cpu吗?如果有,用这个语句试试,其中parallel(a,4)的4是你cpu的个数,有几个写几个试试