Не слишком ли много запросов к базе данных для всех в списке пользователей? - PullRequest
3 голосов
/ 26 июня 2011

В настоящее время я использую MySQL и MyISAM.

У меня есть функция, которая возвращает массив идентификаторов пользователей друзей или пользователей в целом в моем приложении, и при отображении их foreach показался лучшим.

Теперь моя проблема в том, что у меня есть только идентификаторы, поэтому мне нужно было бы вложить вызов базы данных, чтобы получить другую информацию каждого пользователя (например, имя, аватар, другие поля) на основе идентификатора пользователя в цикле.

Я не ожидаю, что сотни тысяч пользователей (в основном, для обучения хобби), хотя, как мне это сделать, например, гибкость размещения кода в foreach для отображения, но не полагаться на массивы идентификаторов, поэтому я ухожу удачи в использовании одного запроса?

Какие-либо общие структуры или советы, с помощью которых я могу отобразить список соответствующим образом?

Не подходит ли количество запросов (1: 1 на пользователей в списке)? (хотя страницы 0..n пользователей, 10 за один раз, кажется, не так уж и плохо, я просто понимаю.)

Ответы [ 3 ]

4 голосов
/ 26 июня 2011

Вы можете использовать метод MySQL IN (), то есть

SELECT username,email,etc FROM user_table WHERE userid IN (1,15,36,105)

, который будет возвращать все строки, где идентификатор пользователя соответствует этим идентификаторам.Это становится менее эффективным, чем больше идентификаторов вы добавляете, но 10 или около того, что вы упомянули, должно быть просто отлично.

1 голос
/ 26 июня 2011

Независимо от того, ожидаете ли вы иметь небольшую базу данных или большую базу данных, я бы рассмотрел использование механизма InnoDB, а не MyISAM.Затраты на обработку немного выше, чем у MyISAM, однако вы получаете все дополнительные преимущества (по мере роста вашего хобби), включая JOIN, что позволит вам получать конкретные данные из нескольких таблиц:

SELECT u.`id`, p.`name`, p.`avatar`
  FROM `Users` AS u
  LEFT JOIN `Profiles` AS p USING `id`

Возвращает идентификатор пользователя и имя и аватар из профилей (где идентификаторы обеих таблиц совпадают)

В Интернете есть множество ресурсов, рассказывающих о нормализации базы данных, вам могут понравиться: http://www.devshed.com/c/a/MySQL/An-Introduction-to-Database-Normalization/

1 голос
/ 26 июня 2011

Почему вы не можете просто использовать левое соединение, чтобы получить все данные за 1 выстрел? Похоже, вы получаете список, но тогда вам нужно только получить всю информацию одного пользователя. Это верно?

Помните, что базы данных - это наборы результатов, и, хотя обычно вы можете вернуть только одну строку, если вам это нужно, вам почти никогда не придется получать одну строку, а затем вернуться к дополнительной информации.

Например, список друзей может содержаться в текстовом столбце записи пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...