表结构如下图:
我现在实现的未读消息为:
SELECT
`n`.`id`
FROM
`message` AS `m`
WHERE
`m`.`id` NOT IN (
SELECT
`m_s`.`message_id`
FROM
`message_status` AS `m_s`
WHERE
`m`.`id` = `n_s`.`message_id`
);
这种实现语句,子查询可以使用到所有,但是主查询无法使用索引,请问在 MySQL 下有什么好的优化方法吗?
注意消息跟用户是一对多关联,及一条消息,多个用户对应关系。
这个问题最好还是从设计角度解决,消息阅读后在message表上面打标记。
另外,如果用子查询,用not exists效率可能会更好一些。