残念ながら、いくつかの投稿の後、この選択はあまり良くありません...今日、テーブルに合計約 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)