Python 2.7 使SQLite运行更快

Python 2.7 使SQLite运行更快,python-2.7,performance,sqlite,raspberry-pi3,Python 2.7,Performance,Sqlite,Raspberry Pi3,情况:我的SQLite DB(~300MB)中的一个表中有大约4000万行、3列无组织的数据。我的数据示例如下: | filehash | filename | filesize | |------------|------------|------------| | hash111 | fileA | 100 | | hash222 | fileB | 250 | | hash333 | fileC |

情况:我的SQLite DB(~300MB)中的一个表中有大约4000万行、3列无组织的数据。我的数据示例如下:

|  filehash  |  filename  |  filesize  |
|------------|------------|------------|
|   hash111  |    fileA   |    100     |
|   hash222  |    fileB   |    250     |
|   hash333  |    fileC   |    380     |
|   hash111  |    fileD   |    250     |  #Hash collision with fileA
|   hash444  |    fileE   |    520     |
|     ...    |     ...    |    ...     |
问题:单个
SELECT
语句可能需要3到5秒。我正在运行的应用程序需要快速运行。单个查询耗时3到5秒太长

#calculates hash
md5hash = hasher(filename)
#I need all 3 columns so that I do not need to parse through the DB a second time
cursor.execute('SELECT * FROM hashtable WHERE filehash = ?', (md5hash,))
returned = cursor.fetchall()
问题:如何使
SELECT
语句运行得更快(我知道这听起来很疯狂,但我希望速度低于0.5秒)

附加信息1:我正在RPI3b(1GB内存,默认100MB交换)上的Python2.7程序上运行它。我这样问主要是因为我担心它会因为“内存不足”而使RPi崩溃

作为参考,当我的应用程序正常运行时,从数据库读取数据时,我们看到最大55MB的RAM可用空间,以及几百MB的缓存数据-我不确定这是否是SQLite缓存(未触及交换)

附加信息2:我愿意使用其他数据库来存储该表(我曾将PyTables或ZODB视为替代品——让我们说我有点绝望)


附加信息3:没有唯一键,因为
SELECT
语句将在列中查找匹配项,这些匹配项只是哈希值,显然存在冲突。

当前,数据库必须扫描整个表以查找所有匹配项。要创建索引,请使用索引:

在哈希表(filehash)上创建索引my\u little\u hash\u索引;

显示数据库模式和查询。更新了我的问题@CL。谢谢,这正是我需要OMG的地方。每秒4个文件我现在每秒4000个文件。