0

我在优化查询时遇到了一点问题,我有 2 个表,一个记录测验的参与度(participation),另一个记录每个问题的答案(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;
4

0 回答 0