20次调用后,循环运行sqlite查询的速度变慢

时间:2019-08-26 08:01:41

标签: python sql database sqlite

我有一个运行查询的sqlite数据库,并且有一条select语句的运行速度比我想象的要慢得多。

我有一种用于获取单个表的db方法

def get_tables_by_id(self, id)
   with self.conn as conn:
     c = conn.cursor()
     c.execute(SELECT * FROM tbl WHERE foreign_id = ? AND date(date) >= ? AND date(date) <= ?, params)
     return c.fetchall()

然后我有另一种方法可以在不同的参数下多次执行此操作。我以为我只是循环并调用get_tables_by_id,而不是准备一次声明以一次全部获取它们,因为我不是通过网络访问数据库,因此如果我查询它们,我将必须执行一些操作来组织所有内容一次全部。我以为既然sqlite在文件系统上运行会很快...但是在调用上述方法约20次后它会变慢。 (我正试图称呼它1000次)

但是,如果我执行以下SQL并在一个大查询中运行它,它将立即返回所有结果...

q = f"SELECT * FROM tbl WHERE foreign_id IN ({','.join('?' * len(foreign_ids)}) AND date(date) >= ? and date(date) <= ?"

我会理解循环查询是否花费了更长的时间(以秒为单位),但我想它将需要5分钟才能完成。为什么会这样放慢速度呢?

0 个答案:

没有答案