【发布时间】:2016-12-20 21:30:14
【问题描述】:
我正在使用 laravel 5.1 并想更新具有近 20 万行的 mysql 表。它更新了近 25000 行,之后不再更新。更新这个需要将近 1 个半小时。
有什么建议吗?
【问题讨论】:
标签: php apache laravel laravel-artisan
我正在使用 laravel 5.1 并想更新具有近 20 万行的 mysql 表。它更新了近 25000 行,之后不再更新。更新这个需要将近 1 个半小时。
有什么建议吗?
【问题讨论】:
标签: php apache laravel laravel-artisan
您首先要检查的东西很少。
例如,如果脚本在同一位置停止一致更新,则可能是您的 SQL 在该特定语句处出现错误。因此,请确保您正在检查 mysql 返回给 PHP 的任何错误(请参阅处理 PDO 和 MySQLi 中的错误的手册)。
如果您通过 PHP 运行 200,000 个不同的 SQL 查询,一次一个,它肯定会很慢,因为您将在每个查询中遇到 SQL 解析器、查询执行和结果获取步骤。有一些更快的替代方案,例如LOAD DATA INFILE,它绕过 MySQL 中的整个解析器和查询执行步骤,允许您直接从 CSV 写入数据库对象文件。这对于一次性将大量数据加载到数据库中非常有用。
【讨论】:
你检查你的错误日志。我想,你说 25000 raw 更新得很好,然后停止。更新时可能会导致一些数据库行传递错误。如果您可以逐个检查更新表,则可以验证它。
例如:首先更新 1-2000 ,然后更新 2000-40000 。当更新 20000-250000 范围时仅通过错误,这意味着您的程序正常并且 db 条目通过错误。但是块明智,当增加负载时。它可以帮助您测试您的程序可以处理负载。这是某种测试方法。
你的程序可能很慢,因为有大量的数据集合,这也取决于你的计算机或服务器或开发环境的性能。尝试重构或优化代码以提高性能。您还可以尝试非关系数据库(mongodb)一段时间,这可能会给您处理大量数据的好时机。我想这可能会帮助你解决你的问题。
【讨论】: