ユーザーに関する情報を保持する「users」テーブルがあります。このテーブル内のフィールドの 1 つは「クエリ」と呼ばれます。同じクエリを持つすべてのユーザーのユーザー ID を選択しようとしています。したがって、私の出力は次のようになります。
user1_id user2_id common_query
43 2 "foo"
117 433 "bar"
1 119 "baz"
1 52 "qux"
残念ながら、このクエリを 1 時間以内に完了することはできません (users テーブルがかなり大きいため)。これは私の現在のクエリです:
SELECT u1.id,
u2.id,
u1.query
FROM users u1
INNER JOIN users u2
ON u1.query = u2.query
AND u1.id <> u2.id
私の説明:
+----+-------------+-------+-------+----------------------+----------------------+---------+---------------------------------+----------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+----------------------+----------------------+---------+---------------------------------+----------+--------------------------+
| 1 | SIMPLE | u1 | index | index_users_on_query | index_users_on_query | 768 | NULL | 10905267 | Using index |
| 1 | SIMPLE | u2 | ref | index_users_on_query | index_users_on_query | 768 | u1.query | 11 | Using where; Using index |
+----+-------------+-------+-------+----------------------+----------------------+---------+---------------------------------+----------+--------------------------+
説明からわかるように、users テーブルはクエリでインデックスが作成され、そのインデックスは私の SELECT で使用されているようです。テーブル u2 の「rows」列の値が 1 ではなく 11 である理由が気になります。このクエリを高速化するためにできることはありますか? 私の '<>' 比較は結合の悪い習慣ですか? また、id フィールドは主キーです