現在、 'item'テーブルと 'pair'テーブルがあります。ペアテーブルには、項目テーブルの主キーを含む2つの列が含まれています。効率よくインデックスを作成するためのMySQLテーブル構造の整理
よくある質問は、最も少ない数のペアに含まれるアイテムの数を見つけることです。
SELECT id,COUNT(*) AS count FROM item i LEFT JOIN pair p ON (i.id = p.id1 OR i.id = p.id2) GROUP BY id ORDER BY count,RAND() LIMIT 100
が、クエリがhoribleパフォーマンスが賢明です。 id1、id2にはペアのインデックスがあります。
+----+-------------+-------+-------+---------------+------+---------+------+-------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+------+---------+------+-------+---------------------------------+
| 1 | SIMPLE | item | ALL | NULL | NULL | NULL | NULL | 5644 | Using temporary; Using filesort |
| 1 | SIMPLE | pair | index | id1 | id1 | 8 | NULL | 18377 | Using index |
+----+-------------+-------+-------+---------------+------+---------+------+-------+---------------------------------+
このタイプのものには、より良いクエリやデータ構造がありますか?
ありがとう、それは素晴らしい作品!!!! '私はSELECT id、COUNT(p1.id1)+ COUNT(p2.id2)からアイテムをカウントしました。LEFT JOINペアp1 ON(i.id = p1.id1)LEFT JOINペアp2 .id = p2.id2)GROUP BY id ORDER BY count、RAND()LIMIT 100'これは合理的にうまくいった。しかし、サブクエリの方が高速なので、2つのサブクエリをインデックスだけで解くことができます。 – barryhunter