Database 第一次在python中对大型SQLite数据库执行查询需要很长时间

Database 第一次在python中对大型SQLite数据库执行查询需要很长时间,database,python-3.x,sqlite,Database,Python 3.x,Sqlite,我有一个相对较大的sqlite db(~2GB)。我正在对它运行一个简单的SELECT查询,运行大约需要2分钟。在第一次执行之后,任何类似的查询都只需不到一秒钟的时间 我在谷歌上搜索了一下,显然这种情况被称为“冷缓存/热缓存”行为。在第一次尝试时,每个字节都从硬盘(冷缓存)中物理读取,这是一项缓慢的任务。在接下来的尝试中,它只是从RAM缓冲区(热缓存)检索数据 然而,在我的SELECT语句中,我只是选择了几个具有特定条件的表。在运行任何查询之前,sqlite是否需要先将所有数据库传输到RAM?有

我有一个相对较大的sqlite db(~2GB)。我正在对它运行一个简单的SELECT查询,运行大约需要2分钟。在第一次执行之后,任何类似的查询都只需不到一秒钟的时间

我在谷歌上搜索了一下,显然这种情况被称为“冷缓存/热缓存”行为。在第一次尝试时,每个字节都从硬盘(冷缓存)中物理读取,这是一项缓慢的任务。在接下来的尝试中,它只是从RAM缓冲区(热缓存)检索数据

然而,在我的SELECT语句中,我只是选择了几个具有特定条件的表。在运行任何查询之前,sqlite是否需要先将所有数据库传输到RAM?有没有办法解决这个问题,或者这就是它的工作方式

谢谢你的评论


另外,我尝试了抽真空和分析,但没有提高执行时间。

文件的读取量取决于您的查询、使用的表、表的大小、索引等。但是,如果文件都不在操作系统级文件系统缓存中,更不用说sqlite的页面缓存了,这将比实际情况慢。@Shawn我有大约200000个表,每个表大约有100行和4列。全部索引。问题是当我第一次运行cursor.execute(“ANY QUERY”)时需要2分钟。之后的任何执行都需要一秒钟。这就是sqlite的行为方式,对此我无能为力?200000个表?难怪这么慢。这种庞大的表数通常是对关系数据库的结构理解不足的一个标志——比如拥有成千上万个完全相同的小表,每个实体一个表,而不是对所有表使用一个表。在sqlite的例子中,这是双重的糟糕,因为第一次在新打开的数据库上准备语句时,它必须解析
sqlite\u master
表中的每个表定义——所有这些表都是200000。实际上,只需要2分钟就可以了。文件的读取量取决于您的查询、使用的表、表的大小、索引等。但是,如果文件都不在OS级文件系统缓存中,更不用说sqlite的页面缓存了,这将比实际情况慢。@Shawn我有大约200000个表,每个表大约有100行和4列。全部索引。问题是当我第一次运行cursor.execute(“ANY QUERY”)时需要2分钟。之后的任何执行都需要一秒钟。这就是sqlite的行为方式,对此我无能为力?200000个表?难怪这么慢。这种庞大的表数通常是对关系数据库的结构理解不足的一个标志——比如拥有成千上万个完全相同的小表,每个实体一个表,而不是对所有表使用一个表。在sqlite的例子中,这是双重的糟糕,因为第一次在新打开的数据库上准备语句时,它必须解析
sqlite\u master
表中的每个表定义——所有这些表都是200000。事实上,只花2分钟就让人印象深刻了。