【发布时间】:2021-10-11 06:39:45
【问题描述】:
我真的需要使用对数函数对超过 400,000 行执行update。不幸的是,sqlite 中似乎不存在 SQL 对数函数。有什么方法可以导出对数函数或导入LOG 函数?
我知道如何做到这一点的唯一其他方法是我相信通过 python 订购 O(n^2)。这种方法会花费太长时间(我试过了,在我的慢速计算机上完成 6% 需要大约 1.5 小时)。
编辑:
我还发现了为什么花了这么长时间。数据库中的主键未标记为主键。所以我使用的代码如下:
for row in database:
...calculations for the row...
...sql update for the specific row which follows:...
for search_row in database:
if search_row[id] = row[id]:
...update values here...
令人难以置信的低效... O(n^2)
【问题讨论】:
-
如果从数据库中读取 24k 值需要 1.5 小时,在 Python 中计算它们的日志,然后再次写回它们,那么奇怪的事情正在发生......
-
在事务中完成所有操作可能会有所帮助。 (另外,在sqlite中有一个定义函数的API,它存在于C和TCL,不确定python)。
-
还有一些库使用函数 API 来提供额外的函数,例如 Log():search.cpan.org/~kjetil/SQLite-More-0.10/lib/SQLite/More.pm