У меня есть MySQL (точнее, MariaDB) база данных, которая содержит разные «записи» (не путать с записями базы данных, это единицы данных, с которыми моя система работает, и состоят из нескольких полей ключа-значения). Каждая «запись» является частью «экземпляра». Каждый «экземпляр является частью„группы пользователей запись „может быть частью„категории“Медленный запрос GROUP BY из-за неправильного использования INDEX
Я пытаюсь написать запрос SQL, который извлекает все категории для группы пользователей“ Каждый.“-. И получить . количество записей, которые существуют во всех случаях в каждой категории My SQL заявление выглядит следующим образом:.
SELECT COUNT(r.id) AS records_number, c.category
FROM records r
INNER JOIN feeds_instances i ON r.instance = i.id
INNER JOIN feeds_instances_categories c ON c.instance = i.id
WHERE i.user_group = '0'
AND r.reviewed IS NULL
GROUP BY c.category
LIMIT 0 , 30
при проверке запроса с SQL_NO_CACHE, я получаю запрос на 0.2+ секунд при удалении GROUP BY, он сокращается до 0,0008 секунд. Когда я выполняю команду EXPLAIN для SQL-запроса, я получаю, что индекс, используемый для таблицы c, является «экземпляром», а не «категорией» y "(таблица feeds_instances_categories имеет три столбца: ID, пример, Категория. Индексы существуют на пример и категория).
Я пытаюсь заставить GROUP BY использовать индекс Категория. Я попытался использовать команду USE INDEX, но я получаю ошибки. Я, скорее всего, не делаю этого правильно и не могу найти, как это сделать правильно в документации.
Любая помощь будет оценена!
Я удалил тег SQL Server, потому что он не поддерживает 'LIMIT'. –
Будет «SELECT {yourFields} FROM feeds_instances_categories c INNER JOIN feeds_instances i ON i.id = c.instance записи INNER JOIN r ON r.instance = i.id {остальная часть}' help? – Terminus