SQL:尽管有索引,但性能仍然很差

我刚遇到一个SQL数据库的以下性能问题:在一个名为“ users”的SQL表中,该表具有约1,000,000个条目,今天花了28秒才能确定今天的注册数量。 注册时间以“创建的”列中的“ Ymd H:i:s”格式保存。


使用的查询

SELECT COUNT(ID) FROM users WHERE DATE(created) = '2014-12-21';

导致此加载时间,尽管DATETIME格式的“创建”列中已经有一个索引

ALTER TABLE `users` ADD INDEX `created` (`created`);

已经设置好了。 性能不佳的原因是调用DATE函数:DATE函数发送“创建”的索引列,并使索引无效。 查询优化器仅知道“已创建”,但不知道DATE(已创建)的结果。 优化查询

SELECT COUNT(ID) FROM users WHERE created BETWEEN '2014-12-21' AND '2014-12-21 23:59:59';

会在0.4秒的时间内产生所需的结果。

背部