python - 大型 Sqlite 数据库搜索

标签 python sql database search performance

如何实现高效的大型 Sqlite 数据库搜索(超过 90000 个条目)?

我正在使用 Python 和 SQLObject ORM:

    import re
    ...

    def search1():
        cr = re.compile(ur'foo')
        for item in Item.select():
            if cr.search(item.name) or cr.search(item.skim):
                print item.name

该函数运行时间超过 30 秒。我应该如何让它运行得更快?

UPD:测试:

    for item in Item.select():
        pass

...与我的初始函数几乎花费相同的时间(0:00:33.093141 到 0:00:33.322414)。所以正则表达式没有时间吃。

Sqlite3 shell 查询:

    select '' from item where name like '%foo%';

运行时间约为一秒。所以主要的时间消耗是由于ORM从数据库检索数据的效率低下造成的。我猜想 SQLObject 在这里抓取整行,而 Sqlite 只触及必要的字段。

最佳答案

最好的方法是修改你的逻辑,在数据库中而不是在 python 程序中进行选择。

您应该重新编写它以执行 Item.select("""name LIKE .... ,而不是执行 Item.select()

如果您执行此操作,并确保对名称和浏览列进行索引,它将很快返回。 90000 个条目并不是一个大数据库。

关于python - 大型 Sqlite 数据库搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1002953/

相关文章:

php - 无法连接数据库?

sql - 范围值 SQL

python - 将变量传递给环境

python - 如何在 Python 3.3 中将一些字符转换为五位 unicode 1?

python - 在python中用 Pandas 排序系列

sql - 如何更正 ‘One to Many table’ 在 PL/pgSQL 中缺少引用?

sql - 如何从表中检索一半的记录 - Oracle 11g

java - 增加 INSERT 速度

c# - 重写方法(返回类型 DBDataReader)并返回不同类型(SQLDBDataReader)

python - 如何让 "cast like"适配与纯 zope.interface 一起使用?