MySql Использование сортировки файлов при использовании группы по - PullRequest
0 голосов
/ 21 апреля 2020

У меня небольшая проблема с оптимизацией запроса, у меня есть 2 таблицы, одна из которых записывает участие (участие) в викторине, а другая - запись ответа на каждый вопрос (Participation_rep), участие связано с кампанией. Таблица.

SELECT count(DISTINCT p.id) as number_of_participation
       FROM participation_rep prep          
           INNER JOIN participation p           
                ON p.id = prep.id_participation
                AND p.trash <> 1
  WHERE prep.id_question IN (780,787,794,801,809)           
  AND prep.trash <> 1   
  GROUP BY pp.id_campaign

Объяснение запроса

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

Выполнение этого запроса занимает 30-50 мс.

Структура участия в таблице:

CREATE TABLE IF NOT EXISTS `participation` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_campagne` int(11) NOT NULL,
  `id_identifiant` int(11) DEFAULT NULL,
  `firstname` varchar(255) DEFAULT NULL,
  `surname` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `date_p` date NOT NULL,
  `hour_p` time NOT NULL,
  `comment` text,
  `trash` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Структура таблицы участие_репортаж:

CREATE TABLE IF NOT EXISTS `participation_rep` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_participation` int(11) NOT NULL,
  `id_question` int(11) NOT NULL,
  `id_rep` int(11) NOT NULL,
  `trash` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_participation` (`id_participation`,`id_question`,`id_reponse`),
  KEY `id_question` (`id_question`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
...