Цитата:
Сообщение от LordJZ
(Сообщение 15321)
Наиболее адекватный на мой взгляд запрос:
Код:
SELECT c.* FROM characters.characters c, realmd.account a WHERE c.account = a.id AND a.gmlevel = 0 LIMIT X;
Можете меня поправить.
|
Такой запрос скорее всего сделает декартово произведеие таблиц characters и realmd, а только потом из полученного венегрета будет выбирать записи, удовлетворяющие условию where.
ИМХО, самым адекватным будет немного переделанный вариант того, что предложил Константин
Код:
SELECT c.*
FROM `realmd`.`account` a
LEFT JOIN `characters`.`characters` c ON c.account = a.id
where a.gmlevel = 0;
Набор данных в таблице account по определению меньше, чем набор данных из таблицы characters. Этот запрос сначала сделает выборку всех гмских акков из таблицы account, а затем left join'ом присоединит к ним персонажей из соответствующей таблицы.
Единственная неприятность, которая здесь есть - как из таблицы characters так и из таблицы account будут производится неиндексированные чтения, т.к. не задействуется ни primary key, ни secondary key(если они вообще есть). На малых массивах данных - это значения играть не будет. Но если скажем база персонажей разрастется до 1-го ляма - тогда начнут быть видны проблемы.
|