Как оптимизировать этот запрос больше? - PullRequest
0 голосов
/ 14 января 2011
    SELECT mem.name, 
           mem.regdate, 
           stat.level
      FROM stats AS stat
INNER JOIN members AS mem
     WHERE stat.id = mem.id 
       AND mem.ref = {$members['id']}
Таблица

stats и members имеет индекс для id. Но когда я запускаю запрос, он проверяет все строки в таблице stats (в таблице members она занимает только одну). Есть идеи, что я делаю не так? Спасибо.

Ответы [ 2 ]

3 голосов
/ 14 января 2011

Используйте правильный синтаксис ANSI-92 JOIN - в предложении ON указаны критерии JOIN:

SELECT mem.name, 
       mem.regdate, 
       stat.level
  FROM stats AS stat
  JOIN members AS mem ON mem.id = stat.id 
 WHERE mem.ref = {$members['id']}

Без критериев JOIN MySQL вернет декартово произведение, а затем применит к ним предложение WHERE.Практически любая другая база данных скажет вам, что у вас есть синтаксическая ошибка для предоставленного вами запроса.

Кроме того, ключевое слово INNER необязательно.

0 голосов
/ 14 января 2011

Попробуйте выбрать из основной таблицы (в этом случае, я полагаю, участников) и присоединиться к статистике для получения дополнительной информации.Используйте ON, чтобы определить, как статистика связана с участниками, и используйте WHERE, чтобы ограничить результаты из таблицы участников.

SELECT mem.name, mem.regdate, stat.level
FROM members AS mem
INNER JOIN stats AS stat
  ON stat.id = mem.id
WHERE mem.ref = {$members['id']}

Поскольку это ВНУТРЕННЕЕ СОЕДИНЕНИЕ, вы также можете его перевернуть (выбрав из статистики, присоединившись кна участников), но это, вероятно, имеет больше смысла, учитывая, что вы смотрите на определенного участника.

...