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()方法可一次插入很多行。但是,如果这样做,则尝试插入数据库索引禁止的重复项时,只会出现整行错误。然后,您必须使用其他代码查找导致错误的特定行。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...