python – 优化Sqlite3 20,000次更新
我有大约20,000个项目的列表,我想插入表格(其中约有50,000行).这些项目中的大多数更新现有行中的某些字段,少数将插入全新的行.
我为每个项目访问数据库两次.首先是一个选择查询,检查该行是否存在.接下来,我根据select查询的结果插入或更新一行.我在更新/插入后立即提交每个事务. 对于前几千个条目,我每秒通过大约3或4个项目,然后它开始变慢.到最后,每次迭代需要超过1/2秒.为什么它会放慢速度? 我的平均时间是:整个运行时间为0.5秒,每个选择查询分为.18s,每次插入/更新分为.31s.最后的0.01是由于在进入数据库之前解析数据的几个未测量的过程. 更新 我已经将所有提交注释掉作为测试并且没有变化,所以不是这样(尽管如此,对于最佳提交的任何更多想法都会受到欢迎). 至于表结构: 随着时间的推移,“杰出的”REAL字段将填充我正在尝试优化的过程. 我没有显式索引,但其中一个字段是每行的唯一键. 我应该注意到,随着数据库变得越来越大,SELECT和UPDATE查询花费的时间越来越多,SELECT操作的性能特别显着下降. 我最初认为这可能是SQLITE的某种结构问题(无论这意味着什么),但是无法在任何地方找到任何表明该程序存在自然限制的文档. 现在,该数据库约为60万美元. 解决方法
我认为你的瓶颈是你使用/ avec每次插入/更新:
要么停止这样做,要么至少切换到WAL journaling;看到我的答案为什么: 如果您有主键,则可以使用INSERT INTO中的ON CONFLICT子句优化选择: http://www.sqlite.org/lang_conflict.html 编辑:早些时候我打算写“如果你有一个主键”而不是外键;我修好了它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |