В настоящее время есть таблица 'item' и таблица 'pair'. Таблица пар просто содержит два столбца, которые содержат первичный ключ из таблицы элементов.
Обычный запрос - найти количество элементов, которые представлены в наименьшем количестве пар.
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
но запрос по производительности очень хорош. Есть индекс на 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 |
+----+-------------+-------+-------+---------------+------+---------+------+-------+---------------------------------+
Есть ли лучший запрос и / или структура данных для такого типа вещей?