我有两个表 r_instance (id为主键,name,user_id,..等)和 r_response (id,comment,r_instance_id为外键)。 每个r_instance行都有多个r_response行(比如min of 3)。
我想在使用r_instance加入r_response时获取最新的ID和评论。
但是不使用GROUP BY,然后在r_response上使用on子句,因为它会降低查询性能。因此,当使用EXPLAIN考虑查询性能时,type
列不应具有 ALL 值。
我的查询是:
SELECT ri.id, ri.name, rr.id, rr.comment
FROM r_instance ri
JOIN (SELECT MAX(id) maxResponseId, r_instance_id instanceId
from r_response
GROUP BY r_instance_id) lastRes ON lastRes.instanceId = ri.id
JOIN r_response rr ON rr.id = lastRes.maxResponseId
答案 0 :(得分:0)
您可以使用名为<base href="http://localhost:81/etl/">
MySQL 8.0 +
row_number()
答案 1 :(得分:0)
这是另一种方法:
SELECT ri.id, ri.name, rr.id, rr.comment
FROM r_instance ri JOIN
JOIN r_response rr
ON ri.id = rr.r_instance_id
WHERE rr.id = (SELECT MAX(rr2.id)
FROM r_response rr2
WHERE rr2.r_instance_id = rr.r_instance_id
);
为了提高性能,您需要r_response(r_instance_id, id)
上的索引。
我应该注意,这并不总是能提供最佳性能。这是表达相同逻辑的另一种策略,导致不同的执行计划。这可能会带来更好的表现。