所以,我有这两张桌子。一个包含,让我们调用它们,错误,另一个包含解决方案。一个错误可能有多个解决方案(或状态,如果可能的话),我想得到最后一个。
现在,我这样做:
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上创建并编制索引,但这似乎没有解决问题。
解决方案是否可以是从此查询创建的视图,然后加入此查询?或者有其他方式可以做到这一点吗?
谢谢!
答案 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)
问题是子选择。解决方案 - 去标准化。是的,我知道,这不是最好的解决方案,但绝对是最快的。
尝试了聚合自我排序,但这只是增加了时间。与加入视图相同。