mysql - 对具有 3500 万行的 mysql 表进行非常缓慢的查询

标签 mysql

我想弄清楚为什么我的 MySQL 数据库上的查询速度如此之慢。我已经阅读了有关 MySQL 性能的各种内容,各种 SO 问题,但这对我来说仍然是一个谜。

  1. 我正在使用 MySQL 5.6.23-log - MySQL Community Server (GPL)
  2. 我有一个包含大约 3500 万行的表。
  3. 这个表被插入到大约 5 次/秒
  4. 表格如下所示: enter image description here

  5. 我在除 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

这个查询大约需要 20-30 秒,然后给出一个结果集:

enter image description here

有什么见解吗?

编辑

按照要求,我的节目创建表:

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

最佳答案

ALTER TABLE answers_onsite ADD key complex_index (screen_id,`timestamp`,answer_id);

关于mysql - 对具有 3500 万行的 mysql 表进行非常缓慢的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37260040/

相关文章:

php - 带有 jquery 的数据库灯箱仅显示数据库的第一个条目

php - 如何在 codeigniter php mysql 中创建动态数组

mysql - 完全加入 Mysql 失败

php - 在 PHP 中捕获网关超时的困难

php - MySQL 查询正在减慢页面加载速度

php - 如何存储实体的动态/多个属性

mysql - 当列必须满足多个值时如何选择行?

mysql - 查找受影响的行

mysql - 在MySQL中如何编写SQL来搜索字段中的单词?

mysql - SQL多表插入