先说场景:
数据库中的一张表中有200W条数据  原始数据
现在 我要将数据库中的原始数据处理 然后分发到几个表中间去  我的实现方法
连接数据库之后 for(int i = 0 ; i < 2000000 ; i++)
{
    //组织好结构体
    MYSTRUCt Struct = MakeStruct();   //将数据库中的一条记录组织成结构体  
    DispatchDate(Struct);             //处理数据 分发至各个表
}请问 有没有办法能够提高效率 ??
能否实现集中查询  将Struct存储到数组中我的查询代码如下就是大量的PutCollect()   这个过程有没有办法提升效率??

解决方案 »

  1.   

    先看看这便文章,如何提高数据库效率
    http://blog.csdn.net/wncnke/archive/2009/05/05/4150545.aspx
    我觉得主要也就是从这便文章所说的几个因素下手。我觉得关键在于尽量避免引起全表扫描
      

  2.   

    另外,使用PutCollect语句并不会影响什么效率
      

  3.   

    看了一下   都是SQL语句方面的  我感觉现在性能的提升应该主要在程序方面  责任应该还没到数据库上...
    我现在的程序太慢了  
      

  4.   

    DispatchDate这个派发函数中如果有逻辑操作的话,为什么不放到SQL的存储过程里做呢?这样可以提升效率,取出来的记录数量就少了很多
      

  5.   

    for(int i = 0 ; i < 2000000 ; i++)
    {
        //组织好结构体
        MYSTRUCt Struct = MakeStruct();   //将数据库中的一条记录组织成结构体  
        DispatchDate(Struct);             //处理数据 分发至各个表
    }这样不好,做的太死MYSTRUCt *Struct=NULL
    for(int i = 0 ; i < 2000000 ; i++)
    {
        //组织好结构体
         MYSTRUCt *Struct2=new MYSTRUCT();
       Struct->next=Struct2;
        p=Struct2; //p用来指示当前位置}先串成个链表,最后一起进行你这样一条进来判断一条不好,我串成一根链表,逻辑判断和派发可以从2端同时开始,你的效率不就提升了一倍吗?
      

  6.   

    对于操作同一个数据库,如果不是并发的数据库,使用多线程并不能提高什么性能。
    不过,如果数据库操作比多多的话,还是要避免在主线程中操作数据库。
    另外MFC中有指针数组,CPtrArray,指针链表CPtrList可以使用。
      

  7.   

    在程序方面,也应考滤SQL语句来实现!
    例如:你把NAME='XX'的分发到表X中;
    insert into x select * from table where NAME='XX';//这样的处理,都交给数据库服务器来处理!数据库服务器,对表的索引建立要健壮!如果按楼主的方法来处理,分析一下:
    一,要从数据库里取数出来,而且是一条一条的记录取。
    二,然后是把数据传到客户端内存处理。
    三,在然后是经过加工后在传到数据库进行处理。以上只是建意,不正确的地方,请拍砖!