我正在尝试使用PHP将2个现有的MySQL MyISAM表组合成一个新表。这是我的PHP代码:
$sql = "CREATE TABLE new_table SELECT * FROM table_1 UNION SELECT * FROM table 2";
mysql_query("$sql");
注意:表格相当庞大,有超过3000万个条目。
所以我在浏览器中打开PHP文件,以便它执行脚本。我用phpmyadmin监控数据库,起初没有任何反应。然后在大约30分钟后,表格“new_table”显示出里面的所有正确数据。
PHP缓冲或缓存“new_table”直到完成,然后在MySQL中创建吗?如果是这样,有没有办法告诉php不要?我担心如果是这种情况,一旦表格达到数十亿行,当我尝试复制它时它将不再适合缓冲区。
有没有人知道如何让PHP立即执行查询而没有缓冲区或缓存延迟?
我试过mysql_unbuffered_query(“$ sql”);并且还有很大的延迟。
非常感谢任何帮助!
答案 0 :(得分:0)
在创建表格期间在另一个MySQL查询中发出show processlist;
,您将看到发生了什么。
答案 1 :(得分:0)
这更多地与数据量--3,000万条记录 - 以及您创建表格的方式 - CREATE TABLE
通过SELECT
UNION
。
关键是,这可能是最慢的方式。从命令行运行此查询,前CREATE TABLE
+批INSERT INTO
应该更快。
我还建议考虑更改表的存储引擎。 MyISAM可能会因大量记录而降级,并具有其他性能考虑因素。你应该考虑其他人,比如InnoDB,这取决于你的数据库交互。详细了解MyISAM versus InnoDB