获得最后一个加入条目

时间:2011-10-03 09:44:46

标签: mysql

所以,我有这两张桌子。一个包含,让我们调用它们,错误,另一个包含解决方案。一个错误可能有多个解决方案(或状态,如果可能的话),我想得到最后一个。

现在,我这样做:

Select b.*, ap.approveMistakeId 
from bugs_table as b
LEFT JOIN (select approveId, approveCause, approveDate, approveInfo, 
                  approveUsername, mistakeId as approveMistakeId 
           from approve_table 
           order by approveDate desc) AS ap 
ON m.mistakeId = ap.approveMistakeId 
GROUP BY b.bugId

这不是一个完整的查询,只是为了说明我是如何接近它的。真正的查询连接超过10个表。

这个问题是,通过这个子选择,查询运行大约3.3s并返回~2.4K记录。没有这个查询,它运行0.4秒,这是更可接受的。我已经在approveDate上创建并编制索引,但这似乎没有解决问题。

解决方案是否可以是从此查询创建的视图,然后加入此查询?或者有其他方式可以做到这一点吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

对于连接两个表,你基本上应该有一些连接条件。如果我将m.mistakeId = ap.approveMistakeId作为b.mistakeId = ap.approveMistakeId,那么您也可以选择更简单的加入:

Select b.*, ap.approveMistakeId, ap.approveDate 
from bugs_table as b
     INNER JOIN approve_table as ap ON b.mistakeId = ap.approveMistakeId
order by ap.approveDate desc 

答案 1 :(得分:0)

问题是子选择。解决方案 - 去标准化。是的,我知道,这不是最好的解决方案,但绝对是最快的。

尝试了聚合自我排序,但这只是增加了时间。与加入视图相同。