首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlite查询中的对数函数?

sqlite查询中的对数函数?
EN

Stack Overflow用户
提问于 2013-01-28 04:29:18
回答 5查看 4.9K关注 0票数 8

我真的需要使用对数函数对超过400,000行执行update。不幸的是,SQL对数函数似乎不存在于sqlite中。有没有什么方法可以导出对数函数或导入LOG函数?

我知道的唯一的另一种方法是通过python命令O(n^2)。这种方法会花费太长的时间(我试过了,在我速度很慢的电脑上花了大约1.5个小时才通过6% )。

编辑:

我还发现了为什么花了这么长时间。数据库中的主键未标记为主键。所以我使用的代码如下:

代码语言:javascript
复制
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)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-28 04:41:10

没有内置的对数函数;您必须定义自己的函数。

如果您使用的是Python,则可以使用pysqliteAPSW模块。

票数 6
EN

Stack Overflow用户

发布于 2021-01-05 20:03:00

原来数学函数(包括对数)是在Sqlite中实现的,但在Ubuntu上的标准Sqlite编译中是禁用的。为了启用它们,您应该下载Sqlite源代码from here (“获取代码”),并按照说明进行编译(“编译”)。默认情况下,将启用必要的选项-DSQLITE_ENABLE_MATH_FUNCTIONS。编译后,您将在build目录中获得sqlite3可执行文件,该文件应作为本地文件运行:

代码语言:javascript
复制
$ ./sqlite3 <database-file>

在编译之前,我建议安装readline,这样历史记录浏览(箭头)和自动完成就可以在Sqlite命令行中正常工作了。

代码语言:javascript
复制
sudo apt install libreadline-dev
票数 3
EN

Stack Overflow用户

发布于 2013-01-28 04:44:35

是什么让你认为它会是O(n^2)?如果说有什么区别的话,那就是它应该是线性的:O(n)

如果你使用自动提交模式,那么它会如此慢的唯一原因就是--这会导致SQLite在每次更新时都会将缓冲区刷新到磁盘。

如果您启动事务,然后使用SELECT / UPDATE循环,最后提交,您的更新应该非常快(假设您的对数函数不是很慢)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14551884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档