我试图弄清楚为什么查询在我的MySQL数据库上这么慢.我已经阅读了有关MySQL性能,各种SO问题的各种内容,但这对我来说仍然是个谜.
除了answer_text之外,我在所有列上都有索引
我正在运行的查询是:
SELECT answer_id, COUNT(1)
FROM answers_onsite a
WHERE a.screen_id=384
AND a.timestamp BETWEEN 1462670000000 AND 1463374800000
GROUP BY a.answer_id
Run Code Online (Sandbox Code Playgroud)
此查询大约需要20-30秒,然后给出结果集:
任何见解?
编辑
如我所知,我的节目创建表:
CREATE TABLE 'answers_onsite' (
'id' bigint(20) unsigned NOT NULL AUTO_INCREMENT,
'device_id' bigint(20) unsigned NOT NULL,
'survey_id' bigint(20) unsigned NOT NULL,
'answer_set_group' varchar(255) NOT NULL,
'timestamp' bigint(20) unsigned NOT NULL,
'screen_id' bigint(20) unsigned NOT NULL,
'answer_id' bigint(20) unsigned NOT NULL DEFAULT '0',
'answer_text' text,
PRIMARY KEY ('id'),
KEY 'device_id' ('device_id'),
KEY 'survey_id' ('survey_id'),
KEY 'answer_set_group' ('answer_set_group'),
KEY 'timestamp' ('timestamp'),
KEY 'screen_id' ('screen_id'),
KEY 'answer_id' ('answer_id')
) ENGINE=InnoDB AUTO_INCREMENT=35716605 DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)
ALTER TABLE answers_onsite ADD key complex_index (screen_id,`timestamp`,answer_id);
Run Code Online (Sandbox Code Playgroud)