要是担心数据删掉是不是可以锁定一下。
count(1)比count(*)更有效率。 
另外尽量使用exists代替select count(1)来判断是否存在记录,

解决方案 »

  1.   

    楼主,如果只是把所有的行循环一遍的话,并不需要知道行数亚。pl/sql中的话
    1 声明 yourcursor
    2 for rec-yourcursor in yourcursor loop
      
       do something;  end loop;
    oracle会自动在最后一行处理完后,退出loop的。java中的话
    while(yourResultSet.next()){
      do something;
    }
    就可以了。
      

  2.   

    补充一点。
    如果在处理完后想知道处理的行数的话,可以在loop中添加一个计数器即可。pl/sql
    wk-count number := 0;
    for rec-yourcursor in yourcursor loop
      
       do something;
       wk-count := wk-count + 1;
    end loop;java
    int iCount = 0;
    while(yourResultSet.next()){
      do something;
      iCount ++;
    }
      

  3.   

    用EOF()可以吧,就不用求总数了
      

  4.   

    使用游标 进行for循环就行了,何必在去  COUNT进行统计浪费时间和资源呢。
      

  5.   

    请问 LGQDUCKY(飘) ( ):
    for比count要快吗?
    why?
      

  6.   

    count(1), count(*), count(rowid)执行效率应该是一样的。
      

  7.   

    count(1), count(*), count(rowid)执行效率应该是一样的。
    --
    我同意你的看法,他们的效率差异应该是相差无几。
      

  8.   

    如果得在过程或函数中处理,则直接在过程中用count(*)然后处理别的数据,这样就不当心别人删除导致数据和实际数据不等的情况了, 如果要把数据查询到前端, 那可以把记录填充到记录集,然后用记录集体的ds.tables[0].rows.count来得到该记录集的总记录数,后者本地处理,基本不耗费什么资源.
      

  9.   

    在过程和函数中处理,也不需要用count(*)来避免数据被人修改数据亚。取结果集时用 select ... for update no wait就可以lock你需要的纪录。
      

  10.   

    如果数据量很大,则不要 for循环
      

  11.   

    count(1)应该比count(*)效率高,在数据量大和字段多的情况下