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)
您想要创建索引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.