ユーザー情報を含むusersテーブルと、現在のユーザーに関連するユーザーを表示する関連テーブルがあります。
関連するユーザーをユーザーID「25」に取得するには、私のクエリは次のようになります。
SELECT
id
FROM users u
INNER JOIN (SELECT
primary_id,
secondary_id
FROM users_rel
WHERE primary_id = '25'
OR secondary_id = '25') temp
ON (u.id = temp.primary_id
OR u.id = temp.secondary_id)
WHERE u.id != '25'
ここでの問題は、users_rel
テーブル内でユーザーIDがプライマリ側またはセカンダリ側のいずれかになり得ることです。すでに600万レコードで行われているので、変更するように言わないでください。変更できません。このクエリは、テーブル内およびテーブル内の4000
レコードを使用して実行するのに2〜5分かかります。user_rel
629241
users
user_rel TABLE
.--------------------------------.
| id | (VARCHAR,36 ) |
| primary_id | (VARCHAR,36) |
| secondary_id | (VARCHAR,36) |
| del | (TINYINT,1) |
|.______________________________.|
インデックスはとの組み合わせとして定義されprimary_id
ますsecondary_id