我有一张桌子:
QUOTE
| id | value | mar_id | date |
我正在尝试为每个mar_id
(市场 ID)选择最新的行。我设法从下面的查询中实现了我所需要的:
SELECT
q.*
FROM quote q
WHERE q.date = (
SELECT MAX(q1.date)
FROM quote q1
WHERE q.mar_id = q1.mar_id
)
但是我发现查询速度非常慢(> 60 秒),以至于我的数据库终止了连接。
我做了一个EXPLAIN
找出原因并得到结果:
我有一个复合唯一索引QUO_UQ
上mar_id, date
这似乎是习惯。
从逻辑上讲,这似乎不是一个很难运行的查询,我该怎么做才能更有效地执行此操作?
不相关子查询的示例
SELECT x.*
FROM quote x
JOIN
( SELECT mar_id
, MAX(date) date
FROM quote
GROUP
BY mar_id
) y
ON y.mar_id = x.mar_id
AND y.date = x.date;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句