我的查询越来越慢,因为我的表中有越来越多的记录。所以我试图加快速度。
数据库大小:
记录: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
都不会加快查询速度。)要使其完整,请在当前表格设置下方。
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;
答案 0 :(得分:2)
在时间戳/日期时间列上使用date()
函数时,即使列已编入索引,也无法使用索引
因此您需要将查询构造为
where
datetime >= concat(CURDATE(),' 00:00:00')
and datetime <= concat(CURDATE(),' 23:59:59')
and status = '7'