如何实现高效的大型 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/