我原先在数据库的过程中使用了:
   SELECT COUNT (*)
     INTO icountnumber
     FROM Recordmaster
    WHERE (reckoningdate >= istartdate AND reckoningdate < ienddate)
      AND (datatype = '01')
但是当数据量越来越大的时候,使用
COUNT (*)就不行了,全表扫描太受不了了;
如果在程序中,我可以用Query控件的Count来得到记录的行数,但是在Oracle的过程里怎么写才能得到icountnumber值,不用SELECT COUNT (*)的方式?

解决方案 »

  1.   

    对你reckoningdate和datatype 字段加个index
    另外,建议用count(1)代替count(*)
      

  2.   

    哪个字段有索引?比如说A,b,c字段?怎么了,能解决?
      

  3.   

    沒有索引,count就會全表掃描,加個索引列吧
      

  4.   

    在reckoningdate 列上建索引。
    count(*)改成count(1)
      

  5.   

    这个表有字段索引,但是不是reckoningdate 和datatype 
      

  6.   


    where里面用了reckoningdate 做条件,可以加个索引。 datatype如果数据不分散的话用不着加索引。
      

  7.   

    你表里有索引,但是你查询条件where里没用,那么执行计划也不会走你的索引,会采用全表扫描,因此需要对你where 条件里的添加索引,以使你查询走index道路,比全表扫描快点。
      

  8.   

    个人觉得加个reckoningdate和datatype组合索引。
      

  9.   

    先看你的datype='01'能过滤掉多少数据。如果过滤掉的数据比较多,则对该字段加上索引。
    reckoningdate字段,则要考虑你常用查询指定的时间范围大不大。如果这个时间范围比较小,对应的数据占总数的比例小的话,加上索引。索引多了对插入有影响。要在插入、更新和查询之间取得一个平衡。
      

  10.   

    http://blog.csdn.net/studyvcmfc/archive/2009/11/22/4852525.aspx
      

  11.   

    当你表有主键的时候,count(1)=count(*)关键是你的reckoningdate 和datatype 要有索引,并且确认datatype 索引是varchar型的
      

  12.   

    where条件家索引吧  或者组合索引 count(*)改成count(1)
      

  13.   

    总之要换掉count(*)、随便你count(啥)