Комментарии 8
Хм, у нас больше 200 000 пользователей сейчас и страница открывается быстрее секунды. Вы проводили мониторинг медленных запросов (slow_query_log)? С индексами всё нормально?
Индексы на полях, которые участвуют в запросе стоят.
Страница:
Запрос, который генерирует Битрикс:
Такой explain:
Страница:
Запрос, который генерирует Битрикс:
SELECT G.ID, G.ACTIVE, G.C_SORT, G.ANONYMOUS, G.NAME, G.DESCRIPTION,
G.STRING_ID, count(distinct U.USER_ID) USERS, G.ID REFERENCE_ID,
concat(G.NAME, ' [', G.ID, ']') REFERENCE,
DATE_FORMAT(G.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') TIMESTAMP_X
FROM
b_group G
LEFT JOIN b_user_group U ON (U.GROUP_ID=G.ID AND ((U.DATE_ACTIVE_FROM IS NULL) OR (U.DATE_ACTIVE_FROM <= now())) AND ((U.DATE_ACTIVE_TO IS NULL) OR (U.DATE_ACTIVE_TO >= now())))
WHERE
(1=1)
GROUP BY
G.ID, G.ACTIVE, G.C_SORT, G.TIMESTAMP_X, G.ANONYMOUS, G.NAME, G.STRING_ID, G.DESCRIPTION
HAVING
1=1
ORDER BY
G.C_SORT asc
Такой explain:
Значит, у вас что-то не так с настройками БД =) У нас очень сложно всё с группами и мы тоже писали себе отдельные инструменты для боле удобной работы с ними, но этот же запрос отрабатывает вот так
Судя по плану исполнения, там могут быть проблемы только при десятке тысяч групп.
Всё понятно. У вас там 111 921 строка перебирается, потому и долго. Мы до такого количества отношений пользователей к группам не дошли.
Да, записей много — более 2 000 000.
Сократил на несколько сот тысяч:
1. Отключил систему рейтингов и авторитетов, т.к. не используется, чтобы пользователи не добавлялись автоматом в группы:
2. Удалил связи с этими группами из b_user_group.
Запрос стал выполняться за 5 сек.
Сократил на несколько сот тысяч:
1. Отключил систему рейтингов и авторитетов, т.к. не используется, чтобы пользователи не добавлялись автоматом в группы:
2. Удалил связи с этими группами из b_user_group.
- Пользователи имеющие право голосовать за рейтинг
- Пользователи имеющие право голосовать за авторитет
Запрос стал выполняться за 5 сек.
Но если не выводить в столбце количество пользователей, то проблемы нет =)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Ревизия уровней доступа пользователей с помощью Power BI на примере CMS Битрикс (БУС)