在PHP中创建大型MySQL表时出现巨大延迟

时间:2011-06-15 02:10:42

标签: php mysql

我正在尝试使用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”);并且还有很大的延迟。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

在创建表格期间在另一个MySQL查询中发出show processlist;,您将看到发生了什么。

答案 1 :(得分:0)

这更多地与数据量--3,000万条记录 - 以及您创建表格的方式 - CREATE TABLE通过SELECT UNION

关键是,这可能是最慢的方式。从命令行运行此查询,前CREATE TABLE +批INSERT INTO应该更快。

我还建议考虑更改表的存储引擎。 MyISAM可能会因大量记录而降级,并具有其他性能考虑因素。你应该考虑其他人,比如InnoDB,这取决于你的数据库交互。详细了解MyISAM versus InnoDB