对于这个模糊的问题感到抱歉,让我解释一下......
我有一个数据库中的单词和计数列表,毫无疑问,它已经达到了巨大的数量。 ~80mb数据库,每个条目是两列(字,整数)
现在当我试图添加一个单词时,我检查它是否已经在数据库中这样... python sqlite3类方法......
self.c.execute('SELECT * FROM {tn} WHERE {cn} = """{wn}"""'.format(tn=self.table1, cn=self.column1, wn=word_name))
exist = self.c.fetchall()
if exist:
do something
答案 0 :(得分:2)
所以你要检查一个非常大的单词表中是否存在单词?我认为你的问题的简短答案是为你的单词列创建一个索引。
下一步是设置一个真正的数据库(例如Postgres)而不是sqlite。 Sqlite没有生产数据库的优化调整,你可能会在切换后看到性能提升。
即使对于包含数百万行的表,如果您的表被正确编入索引,这也不应该是超时间密集型查询。如果您已经有索引但仍然面临性能问题,那么您的数据库设置/环境可能出现问题,或者您的Python代码或数据库适配器可能存在瓶颈。没有更多信息很难说。
答案 1 :(得分:1)
我认为在SQL中使用COUNT
会更快:
self.c.execute('SELECT COUNT(*) FROM {tn} WHERE {cn} = """{wn}"""'.format(tn=self.table1, cn=self.column1, wn=word_name))
num = self.c.fetchone()[0]
if num:
#do something
虽然我还没有测试过它。
有关类似问题,请参阅How to check the existence of a row in SQLite with Python?。