0

ページには、ページの読み込み速度を下げるという1つのクエリがあります。

SELECT * FROM users1 WHERE user_id NOT IN (SELECT user_id FROM users2)

USERS1サイトのすべてのユーザー、大量のデータを含むテーブルです。 USERS2相互フォローユーザーの表です。

そのため、まだフォローしていないユーザーを選択する必要があります。

最適化の方法はありますか?

私は実際のクエリを投稿しています:

SELECT users.*
FROM (
    SELECT user_id
    FROM users
    WHERE user_id!=156 AND user_id NOT IN (
        SELECT follower_id
        FROM following
        WHERE user_id=156
    ) ORDER BY RAND() LIMIT 2
) AS temp
JOIN users ON users.user_id = temp.user_id;

user_idフィールドのインデックス。

クエリにかかった時間は 0.0912 秒

このクエリは、データの少ないテスト サーバーでは問題なく動作しますが、実際のサーバーでは最大 3 秒かかります。

4

3 に答える 3

2

LEFT JOIN仕方:

SELECT *
FROM users1
LEFT JOIN users2 ON users1.user_id = users2.user_id
WHERE users2.user_id IS NULL

NOT EXISTS仕方:

SELECT *
FROM users1
WHERE NOT EXISTS (SELECT 1 FROM users2 WHERE users1.user_id = users2.user_id)

実例:http ://sqlfiddle.com/#!2 / 611f2 / 1

于 2012-07-25T12:23:02.513 に答える
1

LEFT JOIN最高のパフォーマンスを得るには、次のように使用する必要があります。

SELECT a.* 
FROM users1 a
     LEFT JOIN users2 b
        ON a.user_id = b.user_id
WHERE b.user_id IS NULL;

結合の視覚的な説明もご覧ください

于 2012-07-25T12:22:31.560 に答える
0

これでうまくいくはずです:

SELECT users1.* FROM users1
LEFT JOIN users2 on users1.user_id=users2.user_id
WHERE users2.user_id IS NULL
于 2012-07-25T12:22:28.453 に答える