【发布时间】:2012-12-09 19:31:11
【问题描述】:
我有一个如下定义的表...
CREATE table actions (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
end BOOLEAN,
type VARCHAR(15) NOT NULL,
subtype_a VARCHAR(15),
subtype_b VARCHAR(15),
);
我正在尝试查询在每个唯一的 (subtype_a, subtype_b) 对上发生的某种类型的最后一个结束操作,类似于 group by(除了 SQLite 没有说 what 行是有保证的由一组返回)。
在大约 1MB 的 SQLite 数据库上,我现在的查询可能需要两秒以上,但我需要加快速度,使其不到一秒(因为这将被频繁调用) .
示例查询:
SELECT * FROM actions a_out
WHERE id =
(SELECT MAX(a_in.id) FROM actions a_in
WHERE a_out.subtype_a = a_in.subtype_a
AND a_out.subtype_b = a_in.subtype_b
AND a_in.status IS NOT NULL
AND a_in.type = "some_type");
如果有帮助,我知道(subtype_a,subtype_b) 的所有独特可能性
例如:
(a,1)
(a,2)
(b,3)
(b,4)
(b,5)
(b,6)
【问题讨论】:
-
我添加了
greatest-n-per-group标签,由于标签限制为五个,我不得不替换您列出的标签之一。我替换了sqlite,因为您的表定义是特定于 MySQL 的。
标签: mysql performance aggregate-functions greatest-n-per-group