SELECT * FROM table1;
INSERT INTO db2.table1 SELECT * FROM db1.table1;像上面最常用的操作,mysql有没有内存大小的限制?比如说在32位机上,有2G内存限制,如果表的大小超过2G呢?另外我想了解的是比如SELECT * FROM table1;对返回的结果集的内存使用方式,如果结果集太大,是怎么处理和放在什么地方的?有没有介绍这方面实现的资料和链接?谢谢各位!!

解决方案 »

  1.   

    多谢楼上!!SELECT * FROM table1; 
    用上面的语句,mysql_store_result会一次性给应用程序返回所有结果集,那就有内存大小的限制;
    如果用mysql_use_result,那是从mysql服务器一行一行的取得记录的,又效率太低。所以用INSERT INTO db2.table1 SELECT * FROM db1.table1; 
    合并两个表,这种方式在32位机器上能处理大表吗?比如table1的大小超过4G没有问题吗?谢谢!
      

  2.   

    这个要看你使用的引擎是什么,如果单个文件超过4G,如果是32位的windows,肯定是不行的,因为超过了系统的文件最大限度。
      

  3.   

    InnoDB
    单个表超过4G倒不一定,但是肯定会超过2G
      

  4.   

    MYSQL 本身没有内存大小限制! 有限制的是OS!
      

  5.   

    那直接回答这个问题好了:
    INSERT INTO db2.table1 SELECT * FROM db1.table1; 
    table1的数据有可能大于4G,这条语句在32位机器上能执行成功吗?
    引擎是InnoDB
      

  6.   


    多谢yueliangdao0608!!我还是不明白:你的意思是合并两个大表不能直接用INSERT INTO db2.table1 SELECT * FROM db1.table1; 
    而分若干次进行,比如4次,每次合并1/4的记录?如果我都能做到,那mysql为什么做不到呢?我的意思是mysql的实现为什么不能自动分多次合并呢?“比如这块内存你设置了1G。那么你的操作将被分解为4块,每块1G来操作。”是我主动分解为4块?还是mysql自动执行?