8亿多条记录分别存储在10张相同的数据库结构表里请问如何把他们放在同一张表里按指定字段排序内存又不会浪费很大内存因为我这边10个表总共有8亿多条记录 如果 用 union all 组合 起来  然后排序 然后再插入 到新建的表中 但是 这样占用啊内存很大 根本 无法 执行  我内存只有 1G左右 求大牛指点江山

解决方案 »

  1.   

    存放在表里的数据,如果有聚集索引,那么聚集索引决定了记录的物理顺序;如果没有聚集索引,那么就是无序的。表里的数据有没有排序根本不重要,完全可以在查询的时候通过order by来控制就是了。你这个先排序,然后插入新表根本就是错误的概念。
    考虑到你只有1G的内存,要么写个存储过程,按照顺序,每次从表中抽取一定数量的记录到新表即可。一张表抽取完毕,换第二张表,以此类推。这个存储过程设置成自动作业,选空闲的时候跑就是了。
      

  2.   

    给下具体代码  我刚学 SQL 不到10天 
      

  3.   

    就是 象你这样弄 提示错误
    use ttt
    begin tran
    insert into QunListAll_3 select * from (select * from QunListAll_1 union select * from QunListAll_2)aa order by CONVERT(bigint,Class)
    if (@@ERROR !=0)
     begin 
     ROLLBACK TRAN
     end
    drop table QunListAll_1,QunListAll_2
    if (@@ERROR !=0)
     begin 
     ROLLBACK TRAN
     end
    commit无法为数据库 'ttt' 中的对象 'dbo.QunListAll_3' 分配空间,因为 'PRIMARY' 文件组已满。请删除不需要的文件、删除文件组中的对象、将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘空间。
      

  4.   

    先存到一张表中再说啊,排序等用的时候 order by 一下
      

  5.   

    就是 象你这样弄 提示错误
    use ttt
    begin tran
    insert into QunListAll_3 select * from (select * from QunListAll_1 union select * from QunListAll_2)aa order by CONVERT(bigint,Class)
    if (@@ERROR !=0)
     begin 
     ROLLBACK TRAN
     end
    drop table QunListAll_1,QunListAll_2
    if (@@ERROR !=0)
     begin 
     ROLLBACK TRAN
     end
    commit无法为数据库 'ttt' 中的对象 'dbo.QunListAll_3' 分配空间,因为 'PRIMARY' 文件组已满。请删除不需要的文件、删除文件组中的对象、将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘空间。如果没限制文件增长,磁盘是没空间了吧?
      

  6.   

    就是 象你这样弄 提示错误
    use ttt
    begin tran
    insert into QunListAll_3 select * from (select * from QunListAll_1 union select * from QunListAll_2)aa order by CONVERT(bigint,Class)
    if (@@ERROR !=0)
     begin 
     ROLLBACK TRAN
     end
    drop table QunListAll_1,QunListAll_2
    if (@@ERROR !=0)
     begin 
     ROLLBACK TRAN
     end
    commit无法为数据库 'ttt' 中的对象 'dbo.QunListAll_3' 分配空间,因为 'PRIMARY' 文件组已满。请删除不需要的文件、删除文件组中的对象、将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘空间。如果没限制文件增长,磁盘是没空间了吧?有可能是磁盘非NTFS格式,单文件不能大于4G,我之前遇到过这种情况
      

  7.   

    主要是你这个需求到底要做什么,有没有必要搞这么大的表,做一个8亿多条记录的单表,在查询时都是很费事的,这在DB2或ORACLE都是一样的,如果硬要插入的话,把其他表建立分区,字段要选好,然后按分区记录插入,一定意义上也可以说是实现了排序。
      

  8.   

    就是 象你这样弄 提示错误
    use ttt
    begin tran
    insert into QunListAll_3 select * from (select * from QunListAll_1 union select * from QunListAll_2)aa order by CONVERT(bigint,Class)
    if (@@ERROR !=0)
     begin 
     ROLLBACK TRAN
     end
    drop table QunListAll_1,QunListAll_2
    if (@@ERROR !=0)
     begin 
     ROLLBACK TRAN
     end
    commit无法为数据库 'ttt' 中的对象 'dbo.QunListAll_3' 分配空间,因为 'PRIMARY' 文件组已满。请删除不需要的文件、删除文件组中的对象、将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘空间。如果没限制文件增长,磁盘是没空间了吧?有可能是磁盘非NTFS格式,单文件不能大于4G,我之前遇到过这种情况
    我这里单个文件32G的数据库日志都有 后来被我清除了