如何解决在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 \”);仍然有巨大的延迟。
任何帮助将不胜感激!
解决方法
在创建表期间,在另一个MySQL查询中发出“ 1”,您将看到正在发生的事情。
, 这与数据量-3000万条记录-以及创建表的方式-通过带有
UNION
的SELECT
和CREATE TABLE
有关。
关键是,这可能是最慢的方法。从命令行运行此查询,前CREATE TABLE
+批处理INSERT INTO
应该都更快。
我还建议您考虑更改表的存储引擎。 MyISAM可以随着大量记录而降级,并具有其他性能方面的考虑。您应该考虑其他因素,例如InnoDB,具体取决于您的数据库交互。阅读有关MyISAM与InnoDB的更多信息
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。