【发布时间】:2019-08-16 06:51:35
【问题描述】:
尝试优化使用 Group by 和 Max 的 MySQL 查询。尝试获取在任何过去日期之前处于活动状态的最新更新帧。
审核框架表结构:
id bigint pk AI
frame_id bigint fk
name VARCHAR(50)
active int
createdOn DATETIME
updatedOn DATETIME
deletedOn DATETIME
id、frame_id 和 updatedOn 有单独的索引..
当前查询:
SELECT MAX(id) as id1
FROM audit_frame_master
WHERE updatedOn <='2019-03-25 21:00:00'
AND active=1
AND deletedOn IS NULL
GROUP
BY frame_id
性能:
表格有大约 1M 行。执行平均需要 4 秒。有没有办法优化上述查询?
【问题讨论】:
-
你的集群索引列是什么?
-
@SiamakFerdos: id 是集群索引列。
-
为什么你需要两个
AND active=1 AND deletedOn IS NULL?AND active=1够吗? -
基本上我想要未删除的特定日期的活动框架列表。
-
但是可以删除活动帧吗?通常当删除记录应该得到
active = 0或者如果不是 - 那你为什么需要active=1来检查?
标签: database database-design group-by query-optimization groupwise-maximum