问题假设是这样的,假设数据库里的一张表有1万条记录,表里有个字段的值为0,1.
id   status
111     1
222     0
333     1
444     1
...    ...
有这样一万条记录。主要目的是我想把status字段为0和1的区分成两堆
假设现在有两种操作:
1.一次性从数据库读出一万条记录,返回在逻辑层,或UI层进行判断,把0,1字段的值进行分堆。
2.分两次读取数据,一次是status=0的,一次是status=1的。
我想问下大家在实际开发中回到过这样的问题吗,如果遇到了您会怎么解决呢?
先说下我的观点,
我个人觉的还是读取数据库来的方便些,但是不知道性能上会有什么差别,希望高手能给予数据加以强有力的说明,谢谢!

解决方案 »

  1.   

    其实主要还是看楼主您的应用!
    您在B/S里读一万笔记录?这样不实现吧针对你的方法一:
    可以返回一个DataSet或DataTable,然后用它们的内置的方法,筛选出适合的数据:
    DataRow[] rows1=DataTable.Select("Status=0");DataRow[] rows2=DataTable.Select("Status=1");这样可避免每笔记录判断分堆操作,简单些.针对您的方法二,直接用Select语句:
    select * from table where status=0
    select * from table where status=1直接把返回值填入DataSet,不用读两次.
    理论上来讲,方法二会快些.
      

  2.   

    如果只是单纯的读取数据,个人建议把所有数据都读取出来在进行分组
    这样对数据库的操作比较少,
    如果你每次只需要一组数据的话,建议每次只读一组数据,并iqekeyi 把status 设置索引,这样较快查找速度
      

  3.   

    select   *   from   table   where   status=0 
    select   *   from   table   where   status=1 
    这样更好
    就执行操作来说,区别不大
    楼主如果数据量太大,应该使用数据缓存技术 降低服务器负担
      

  4.   

    1和2的区别就是你想把压力给谁的问题. 给web server还是db server
    具体看情况,没有一概而论的.
      

  5.   

    如果讲速度快慢的话,那么不用说,2肯定比1快. 在字段上建了索引,加上sql是直接的底层操作取数. 而.net里经过了很多转换.
    但速度快不代表消耗就小,还是上面那句话,把压力给谁的问题.
      

  6.   

    对于这个问题来说,很简单的两条SQL语句,用不用存储过程都一样,编译和查询优化时间可以忽略.