我有一个表,它通过一个自动递增列(跟踪输入记录的顺序)和一个为最后插入的记录设置为 1 的“CURRENT_FLAG”来进行版本控制。加入此表的视图始终使用 CURRENT_FLAG=1,以便它们只返回最后一条记录。
所以如果结构是这样的:
AUTO_ID PERSON_ID PERSON_VALUE CURRENT_FLAG
1 1 5452 0
2 1 637 1
3 2 4523 1
下次我想插入一条记录时,我需要更新 CURRENT_FLAG。现在我执行这样的事情:
UPDATE T
LEFT JOIN (
SELECT PERSON_ID, MAX(AUTO_ID) as AUTO_ID
FROM T
GROUP BY PERSON_ID
) as T1 ON T.PERSON_ID = T1.PERSON_ID and T.AUTO_ID = T1.AUTO_ID
SET T.CURRENT_FLAG = COALESCE(T.PERSON_ID / T.PERSON_ID, 0)
但是,即使在 PERSON_ID 和 AUTO_ID 上都有索引,该查询在一个相当小的表上也需要几秒钟。
这些记录是从临时表中作为一批插入的,并且不是一次插入一个人,所以我无法拉起 auto_ids 并手动设置标志或将所有 current_flags 设置为 0。
有没有人有更好的方法来编写该查询,或者使用触发器和\或其他解决方案做同样的事情?MySQL 5.0+。