我可以加快速度 - SELECT min(date_time)FROM db.event - 在bash脚本中使用

and*_*sg3 0 mysql sql linux bash shell

我正在尝试缩短查询此表所需的时间.这是我们的生产表之一,因此我们无法对其进行任何更改.我在bash脚本上使用以下查询

SELECT min(date_time) FROM db.event 
Run Code Online (Sandbox Code Playgroud)

但是,这需要大约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)
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

您想要创建索引date_time:

create index event_datetime on event(date_time)
Run Code Online (Sandbox Code Playgroud)

该字段date_time必须是索引中的第一列.

编辑:

如果您无法对表格进行更改,那么您就遇到了问题.如果datetime与之相关id,那么你可以这样做:

select datetime
from event
order by id
limit 1;
Run Code Online (Sandbox Code Playgroud)

但这是一个很大的假设,即最小日期是最小id.