Эффективность множественных тестов на равенство и объединений в MySQL - PullRequest
2 голосов
/ 19 мая 2011

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

SELECT field1, field2, ... fieldn
FROM content
WHERE user_id=1 OR user_id=2 OR ...

Мне кажется, что этоотносительно эффективный ... до определенного момента.Скажем, в таблице content было> 200 тыс. Записей, и меня интересовали записи от 50 конкретных пользователей.Будет ли эффективен такой запрос, как следующий?

SELECT field1, field2, ... fieldn
FROM content
WHERE user_id=1 OR ... OR user_id=50

Я подумываю создать таблицу users_group, например:

CREATE TABLE users_group (
  group_id int(11),
  user_id int(11),
  primary_key(group_id,user_id)
);

... и заполнить ее группами пользователей.программное обеспечение интересует.

Я мог бы тогда сделать запрос, подобный этому:

SELECT field1, field2, ... fieldn
FROM content c
INNER JOIN users_group ug ON c.user_id=ug.user_id
WHERE ug.group_id=1

Было бы это более эффективно?

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Или что-то еще проще:

SELECT field1, field2, ... fieldn
 FROM content
 WHERE user_id IN (1,2,3,4,5,6,7...50)

Построить динамический SQL из чего-то вроде PHP совсем несложно.

  • добавлено: также, довольно прилично, пока вы не получите около 1000 или около того предметов. Вам также придется следить за MAX_PACKET, но это самый простой / быстрый способ сделать это для вещей в этом диапазоне.
0 голосов
/ 19 мая 2011

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

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