【发布时间】:2011-04-16 12:04:25
【问题描述】:
有一天,我在 SO 上回答了 question(被接受为正确),但答案让我非常怀疑。
很快,用户就有了一个包含以下字段的表:
id INT PRIMARY KEY
dt DATETIME (with an INDEX)
lt DOUBLE
查询SELECT DATE(dt),AVG(lt) FROM table GROUP BY DATE(dt) 真的很慢。
我们告诉他(部分)问题在于使用 DATE(dt) 作为字段和分组,但 db 位于生产服务器上,无法拆分该字段。
因此(使用触发器)插入了另一个字段da DATE (with an INDEX),自动填充了 DATE(dt)。查询 SELECT da,AVG(lt) FROM table GROUP BY da 稍微快一点,但大约有 800 万条记录,它花了大约 60 秒!!!
我在我的电脑上试过,最后我发现,删除字段 da 查询上的索引只需要 7 秒,而删除索引后使用 DATE(dt) 需要 13 秒。
我一直认为用于分组的列上的索引可以真正加快查询速度,而不是相反(慢 8 倍!!!)。
为什么?是什么原因?
非常感谢。
【问题讨论】:
-
@FractalizeR:在我的电脑上我有 MySQL5.5
标签: mysql