那么,我有这两个表。一个包含,我们称之为bug,另一个包含解决方案。一个bug可能有多个解决方案(或者状态,如果你可以的话),我想要得到最后一个。
现在,我是这样做的:
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.3秒,返回约2.4万条记录。如果没有这个查询,它的运行时间为0.4秒,这是更容易接受的。我已经在approveDate上创建了一个索引,但这似乎并没有解决问题。
解决方案是否可以是一个视图,从这个查询创建,然后连接到这个查询?或者有其他方式可以做到这一点吗?
谢谢!
要连接两个表,本质上应该有一些连接条件。如果我取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
问题出在子选择。解决方案是去标准化。是的,我知道,这不是最好的解决方案,但绝对是最快的。
尝试聚合自排序,但这只会增加时间。