我有一表,数据行数在5000多万左右,字段有A,B,C,D,E,F,G;而且我已经建立了主键,是联合主键,在A,B,E上建立了联合主键,为什么我用select count(*) 检索行数速度还是特别慢?大概得花费1分30秒左右。请问有较快的方法吗?

解决方案 »

  1.   

    表数据量大!试试并行查询吧!
    select /*+parallel(t,15)*/
       count(*) from table1 t;
       
      

  2.   

    只能用 联合主键(A,B,E)   第一列 select count(A)
      

  3.   

    select count(*) 不能用到你建的索引,执行的全表扫描,用count(A)
      

  4.   

    指望优化count,可能性很小,一般用count(*) 即可。最好别钻牛角尖。
      

  5.   

    ABE三列上可以null吗?
    select count(*)的执行计划是table access full?
      

  6.   

    select count(b) from table t  --在b列上建索引
      

  7.   

    count(*) 执行了全表现扫描,用count(a)
      

  8.   

    不知道为什么怎么多人都会认为count(*)一定走全表扫描?
    如果table上有index,并且index所包含的column都不能为null。oracle scan index就能知道table有多少row。
    如果index包含的column可以为null,index是不会包含null 行的。这个index就不能被用来计算总行数。
      

  9.   

    嗯,count(*)是不做全表扫描的,效果如同count(a),不用指望max(rowid)效果更差。