加快MySQL查询速度

时间:2015-07-02 07:37:54

标签: mysql performance

我的查询越来越慢,因为我的表中有越来越多的记录。所以我试图加快速度。

数据库大小:
记录:1,200,000
数据22,9 MiB
指数46,8 MiB
总计69,7 MiB

查询的目的是计算与条件匹配的记录数。条件是日期(当前日期)和状态编号。请参阅以下查询:

SELECT
  COUNT(id) AS total
FROM
  order_process
WHERE
  DATE(datetime) = CURDATE() AND
  status = '7';

此刻,此查询需要800毫秒。我需要使用不同的日期多次运行此查询。这些都在同一个脚本中,因此脚本执行时间超过3秒。我怎样才能加快速度呢?

我已经做了什么:

  • 创建的索引(status上的索引和datetime都不会加快查询速度。)
  • 经过测试的InnoDB引擎(速度较慢,主要是在此表上阅读)

要使其完整,请在当前表格设置下方。

CREATE TABLE IF NOT EXISTS `order_process` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `order_id` int(11) NOT NULL,
  `status` int(11) NOT NULL,
  `datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `remark` text NOT NULL,
  PRIMARY KEY (`id`),
  KEY `orderid` (`order_id`),
  KEY `datetime` (`datetime`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

1 个答案:

答案 0 :(得分:2)

在时间戳/日期时间列上使用date()函数时,即使列已编入索引,也无法使用索引

因此您需要将查询构造为

where
datetime >= concat(CURDATE(),' 00:00:00') 
and datetime <= concat(CURDATE(),' 23:59:59')
and status = '7'