首先,如果使用的术语不正确,则表示抱歉。我不是一个mySQL专业人员。将索引添加到生成的列
我有这样的一个表:
CREATE TABLE `accesses` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`time` int(11) DEFAULT NULL,
`accessed_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_accesses_on_accessed_at` (`accessed_at`)
) ENGINE=InnoDB AUTO_INCREMENT=9278483 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
此表中有10.000.000行。我用它来生成图表,用这样的查询:
SELECT SUM(time) AS value, DATE(created_at) AS date
FROM `accesses`
GROUP BY date;
这个查询很长(超过1分钟)。我在做很多其他的查询(与AVG
,MIN
或MAX
代替SUM
,或在特定日期或一个月WHERE
,或GROUP BY HOUR(created_at)
,等...)
我想优化。 我最好的想法是添加几个列,冗余,如DATE(created_at)
,HOUR(created_at)
,MONTH(created_at)
,然后添加一个索引。
...这个解决方案很好,还是有其他的吗?
问候
给出完整的表格声明可能是明智的,输出结果如下:'SHOW CREATE TABLE accesses' – NDM 2014-10-16 15:16:58
对于这样的简单选择查询,1分钟就是海拉了,即使有你拥有的记录数量也是如此。我会把这个问题提交给[DatabaseAdministrators](http://dba.stackexchange.com/)。 – Alternatex 2014-10-16 15:19:23
好吧,他在10万条记录上做了“组”和“总和”,没有限制结果集... – NDM 2014-10-16 15:21:37