在sqlite数据库中,通过字符串列表进行选择的最快方法是什么?

在sqlite数据库中,通过字符串列表进行选择的最快方法是什么?,sqlite,Sqlite,我的数据库结构大致如下: 表1(名称)-

我的数据库结构大致如下:

表1(名称)-<表2-<表3(分数)

其中-<表示一对多关系。我需要做的是为给定列表中的每个字符串找到表3中具有最大分数值的链接条目。我现在做这件事的方式很慢,我想知道它是否可以加快

我是如何做到这一点的:

SELECT k.score,k.yaw,k.pitch,k.roll,k.kp_number,k.ke_number,k.points,k.elems --various fields of third table
FROM File 
JOIN FaceDetection AS d ON d.f_id=File.file_id --joining second table
JOIN FaceKey AS k ON k.face_det=d.fd_id --joining third table
WHERE name=:fld 
ORDER BY k.score DESC 

我打开事务,用上面的文本准备查询,然后在循环中从数据库中检索我感兴趣的条目,然后提交事务。什么是更好、更快的方法?

索引可用于所有用于查找或排序的列,但查询不能对每个表使用多个索引

检查输出以查看此查询是否进行表扫描或使用索引

您不是从任何表返回值,而是从
FaceKey
返回值,因此实际上不需要执行联接。 但是,按以下方式重写查询可能有帮助,也可能没有帮助:

SELECT score,
       yaw,
       pitch,
       roll,
       kp_number,
       ke_number,
       points,
       elems
FROM FaceKey
WHERE face_det IN (SELECT fd_id
                   FROM FaceDetection
                   WHERE f_id IN (SELECT file_id
                                  FROM File
                                  WHERE name = :fld))
ORDER BY score DESC

你的问题似乎很好。数据库本身进行了大量优化。你的交易电话也必须是那样的。我看没有办法提高效率。你能把
WHERE
条件作为
条件放在
上吗?你在ID字段上放了索引了吗?我想要的答案我最终得到了[here][1]。[1]: