Производительность MySQL:Один запрос с использованием GROUP_CONCAT или два отдельных запроса?

StackOverflow https://stackoverflow.com/questions/1558822

  •  21-09-2019
  •  | 
  •  

Вопрос

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

Моя конечная цель — получить имя пользователя учетной записи и список идентификаторов разрешений, разделенных запятыми.Есть два способа сделать это:

SELECT a.username, GROUP_CONCAT(rp.permission_id) as permission_ids
FROM account AS a
JOIN role_permission AS rp
ON rp.role_id = a.role_id
WHERE a.id = 1902

...или ...

SELECT username
FROM account
WHERE id = 1902;

SELECT permission_id
FROM account_permission
WHERE account_id = 1902

С помощью одного запроса я получаю именно те результаты, которые мне нужны.С двумя запросами мне нужно создать список, разделенный запятыми, в приложении (PHP), используя второй набор результатов.

Есть ли какие-либо причины, по которым НЕ следует выбирать первый вариант?Я никогда раньше не использовал GROUP_CONCAT, поэтому не знаю, как это повлияет на производительность.

Это было полезно?

Решение

Производительность должна быть в порядке — лучше, чем два запроса.Вам необходимо осознавать, что длина ограничена хотя:

Результат усекается до максимальной длины, заданной group_concat_max_len системная переменная, значение по умолчанию которой равно 1024.Значение можно установить выше, хотя эффективная максимальная длина возвращаемого значения ограничена значением max_allowed_packet.Синтаксис изменения значения group_concat_max_len во время выполнения следующий, где val — целое число без знака:

SET [GLOBAL | SESSION] group_concat_max_len = val;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top