有没有办法加快数据库交易?

时间:2016-03-29 12:23:13

标签: python sql database sqlite

对于这个模糊的问题感到抱歉,让我解释一下......

我有一个数据库中的单词和计数列表,毫无疑问,它已经达到了巨大的数量。 ~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

2 个答案:

答案 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?