不幸的是,在一些帖子之后,这个选择不太好......今天,表上总共有大约 900 条记录,当我按我的用户 ID 过滤线程时(只有 45 个不同的线程!),MySQL 需要 0.30 秒(一开始,只需要 0.04/0.05 秒......我认为恶化与我订阅的线程数成正比)这可能意味着当我订阅 300 个不同的线程时,我应该等待大约 2 秒来进行此查询。 .. 太多了。奇怪的是,如果我“限制 0,10”这个查询或获得完整查询,执行速度不会改变!这就是为什么我认为它不好......因为我想即使我限制它也必须选择整个数据。没有办法解决。这就是我设置查询的方式。有一个新的通知表,
通知表字段:id、idcontent、userid
SELECT
CASE WHEN (re.id is NULL) THEN fa.id ELSE re.id END AS id,
fa.id as idtopic,
CASE WHEN (re.userid is NULL) THEN fa.userid ELSE re.userid END AS userid,
CASE WHEN (re.content is NULL) THEN fa.content ELSE re.content END AS content,
n.notify,
u.id as reuserid, u.name, u.surname, u.photo,
CASE WHEN (re.date is NULL) THEN unix_timestamp(fa.date) ELSE unix_timestamp(re.date) END AS LASTUPDATE
FROM notifications AS n
LEFT JOIN post AS fa
ON fa.id = n.idcontent
LEFT JOIN post AS re
ON re.id=(SELECT ID FROM post WHERE IDTOPIC = fa.ID AND userid <> $USERID ORDER BY DATE DESC LIMIT 1)
LEFT JOIN users AS u
ON u.id = ( CASE WHEN (re.userid is NULL) THEN fa.userid ELSE re.userid END )
WHERE
n.userid = $USERID
AND NOT (fa.userid = $USERID AND re.userid = $USERID)