我正在尝试为表格填充一些数据。该查询正在包含约 5000 万条记录的表上运行。我目前使用的查询如下。它计算匹配template
id 并且是BETWEEN
两个 unix 时间戳的行数:
SELECT COUNT(*) as count FROM `s_log`
WHERE `time_sent` BETWEEN '1346904000' AND '1346993271'
AND `template` = '1'
虽然上面的查询确实有效,但在循环遍历每个查询时性能相当慢template
,有时可能有数百个。时间戳存储为int
正确索引。只是为了测试一下,我尝试运行下面的查询,省略了time_sent
限制:
SELECT COUNT(*) as count FROM `s_log`
AND `template` = '1'
正如预期的那样,它运行得非常快,但显然没有将计数结果限制在正确的时间范围内。如何获得特定的计数并template
限制计数BETWEEN
两个 unix 时间戳?
EXPLAIN:
1 | 简单 | s_log | 参考 | time_sent,模板 | 模板 | 4 | 常量 | 71925 | 使用哪里
SHOW CREATE TABLE s_log:
CREATE TABLE `s_log` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`email` varchar(255) NOT NULL,
`time_sent` int(25) NOT NULL,
`template` int(55) NOT NULL,
`key` varchar(255) NOT NULL,
`node_id` int(55) NOT NULL,
`status` varchar(55) NOT NULL,
PRIMARY KEY (`id`),
KEY `email` (`email`),
KEY `time_sent` (`time_sent`),
KEY `template` (`template`),
KEY `node_id` (`node_id`),
KEY `key` (`key`),
KEY `status` (`status`),
KEY `timestamp` (`timestamp`)
) ENGINE=MyISAM AUTO_INCREMENT=2078966 DEFAULT CHARSET=latin1