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

时间:2013-07-12 14:13:37

标签: sqlite

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

table1(name) - < table2 - < table3(得分)

其中 - <意味着1对多的关系。我需要做的是对于给定列表中的每个字符串,从表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 

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

1 个答案:

答案 0 :(得分:1)

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

检查EXPLAIN QUERY PLAN输出以查看此查询是执行表扫描还是使用索引。

除了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