0

我有大致以下结构的数据库:

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

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

我是怎么做的:

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 

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

4

1 回答 1

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
于 2013-07-12T14:55:46.317 回答