如何解决Python / Django / MySQL优化
实际上只是一个逻辑问题...我有一个脚本,该脚本从CSV中获取数据行,解析单元格值以统一数据,并在数据库中检查键/主值不存在,从而防止重复!目前,第一个10-15k条目相当快地提交给数据库,但是由于数据库中有更多条目要检查重复项,因此它开始确实变慢了……。到数据库中有10万行时,提交速度约为1 /秒啊...
所以我的问题是,将数据分别提取和解析到DB提交过程(在基于类的脚本中,或者可以将多处理添加到csv解析或DB提交中)是否更有效(Python方式),并且是如果我只是交叉引用1个表和1个值,有没有一种更快的方法来检查数据库是否重复?
非常感谢
库达
解决方法
如果前10-15k个条目工作正常,则可能是数据库查询出现了问题。您是否有合适的索引,数据库是否使用了该索引?您可以使用EXPLAIN
语句查看数据库的运行情况,无论它实际上是针对Django使用的特定查询使用索引。
如果表开始为空,则在前几千行之后运行ANALYZE TABLE
可能也有帮助;从表为空开始,查询优化器可能具有过时的统计信息。为了验证该假设,可以在脚本运行时,开始变慢时连接到数据库,然后手动运行ANALYSE TABLE
。如果立即加速,则问题确实是过时的统计信息。
对于数据库提交本身的优化,在您的情况下这可能不是问题(因为前10k行的性能很好),但是一个方面是往返;对于每个查询,它都必须转到数据库并返回结果。如果数据库跨网络,这一点尤其明显。如果您需要加快速度,则Django有一个bulk_create()
方法可一次插入很多行。但是,如果这样做,则尝试插入数据库索引禁止的重复项时,只会出现整行错误。然后,您必须使用其他代码查找导致错误的特定行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。