我正在尝试缩短查询此表所需的时间。这是我们的生产表之一,因此我们无法对其进行任何更改。 我在 bash 脚本上使用以下查询
SELECT min(date_time) FROM db.event
但是,这大约需要 20 分钟。我们在这些分区上有很多数据——大约 100GB。 bash 脚本需要收集该表中最早的记录。有没有更好的方法可以提高效率,比如说 10 分钟或更短时间?
*************************** 1. row ***************************
Table: event
Create Table: CREATE TABLE `event` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`type` varchar(100) NOT NULL,
`application` varchar(100) NOT NULL,
`cdr_id` varchar(100) NOT NULL,
`date_time` datetime NOT NULL,
PRIMARY KEY (`id`,`date_time`),
KEY `ix_cdr` (`cdr_id`),
KEY `ix_type_app_cdr` (`type`,`application`,`cdr_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2985903027 DEFAULT CHARSET=latin1
/*!50100 PARTITION BY LIST (to_days(date_time))
(PARTITION p735660 VALUES IN (735060) ENGINE = InnoDB,
...
... many partitions here
...
...
PARTITION p735660 VALUES IN (735566) ENGINE = InnoDB)
最佳答案
您想在 date_time
上创建索引:
create index event_datetime on event(date_time)
date_time
字段必须是索引中的第一列。
编辑:
如果您不能对表格进行更改,那么您就有问题了。如果 datetime
与 id
相关,那么您可以:
select datetime
from event
order by id
limit 1;
但这是一个很大的假设,即最小日期在最小 id 上。
关于mysql - 我可以让它更快吗 - SELECT min(date_time) FROM db.event - 在 bash 脚本中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23134712/