Я есть таблицы игроков, кланы и clanmembers который соединяет игроков к кланам. То, что я хочу сделать, - это запросить всех игроков с информацией о клане, независимо от их клана или нет, и отсортировать их по player.rank (с индексом).MySQL использует FileSort и приводит к снижению производительности
SELECT * FROM игроков LEFT JOIN clanmembers ON clanmembers.player = players.id LEFT JOIN кланами НА clanmembers.clan = clans.id ORDER BY ранга DESC LIMIT 0,100;
Запрос выше работает правильно, но по какой-либо причине он сканирует всю таблицу игроков (много строк), и запрос выполняется очень медленно. Если я ВЫБЕРИВАЮЩИХ игроков. * Вместо этого сканируются ракеты производительности и всего 100 строк, а не всех игроков.
Что я здесь делаю неправильно? Я не понимаю, почему добавление материала клана для выбора делает запрос проверкой всей таблицы игроков, когда соединения остаются одинаковыми.
редактировать: All indexes here.
редактировать 2: Query results (EXPLAIN) here
Pls добавить результаты Объяснения для обоих запросов, а также список индексов на 2 таблиц и полей, которые они включают. – Shadow
Добавлено в оригинальное сообщение. id_rank был добавлен из-за ответа Джави, но не работал. –