Mysql 按类型id从事务历史组中选择t,子类型id从解释中选择结果:id->1,选择类型->简单,表格->事务历史,类型->索引,可能的键->空,键->类型子类型,键长度->9,参考->空,行->37025337,过滤->100.00,额外->空白新索引:主键(事

Mysql 按类型id从事务历史组中选择t,子类型id从解释中选择结果:id->1,选择类型->简单,表格->事务历史,类型->索引,可能的键->空,键->类型子类型,键长度->9,参考->空,行->37025337,过滤->100.00,额外->空白新索引:主键(事,mysql,database,Mysql,Database,按类型id从事务历史组中选择t,子类型id从解释中选择结果:id->1,选择类型->简单,表格->事务历史,类型->索引,可能的键->空,键->类型子类型,键长度->9,参考->空,行->37025337,过滤->100.00,额外->空白新索引:主键(事务历史id),KEYsub\u-type\u-id\u-idx(sub\u-id\u-id),KEYsettling\u-date(settling\u-date\u-time),KEYtype\u-id,sub\u-type\u-id)从解释


按类型id从事务历史组中选择t,子类型id从解释中选择结果:id->1,选择类型->简单,表格->事务历史,类型->索引,可能的键->空,键->类型子类型,键长度->9,参考->空,行->37025337,过滤->100.00,额外->空白新索引:主键(
事务历史id
),KEY
sub\u-type\u-id\u-idx
sub\u-id\u-id
),KEY
settling\u-date
settling\u-date\u-time
),KEY
type\u-id
sub\u-type\u-id
)从解释中我不明白为什么可能的键和ref在使用正确的索引时都是空的
 CREATE TABLE `transaction_history` (
  `transaction_history_id` int(11) NOT NULL AUTO_INCREMENT,
  `type_id` int(11) NOT NULL,
  `sub_type_id` int(11) DEFAULT NULL,
  `transaction_id` int(11) DEFAULT NULL,
  `settlement_date_time` datetime DEFAULT NULL,
  PRIMARY KEY (`transaction_history_id`),
  UNIQUE KEY `transaction_history_id_UNIQUE` (`transaction_history_id`),
  KEY `type_id_idx` (`type_id`),
  KEY `sub_type_id_idx` (`sub_type_id_id`),
  KEY `transaction_id_idx` (`ufmid`),
  KEY `settlement_date` (`settlement_date_time`),
  KEY `type_sub_type` (`type_id`,`sub_type_id`)
) ENGINE=InnoDB AUTO_INCREMENT=36832823 DEFAULT CHARSET=latin1;
(type_id,sub_type_id) -> count 
(3,4) -> 23500
(2,2) -> 569323
(2,3) -> 45028
(3,2) -> 1038943
select count(a1.transaction_id), a1.type_id, a1.sub_type_id
from  transaction_history a1, transaction_history a2 
where a1.transaction_id= a2.transaction_id
and  not exists (Select a1.settlement_date_time < a2.settlement_date_time) 
group by a1.type_id, a1.sub_type_id
select count(a1.transaction_id), a1.type_id, a1.sub_type_id  
from  transaction_history a1 join transaction_history a2 using(transaction_id)
where  a1.settlement_date_time > a2.settlement_date_time 
group by a1.type_id, a1.sub_type_id
select count(hist.transaction_id), hist.type_id, hist.sub_type_id
from  transaction_history hist 
    (select type_id, sub_type_id, max(settlement_date_time) as max_dt 
    from transaction_history group by type_id, sub_type_id) latest_date 
on hist.type_id= latest_date.type_id AND 
 hist.sub_type_id=latest_date.sub_type_id AND 
 hist.settlement_date_time = latest_date.max_dt
group by hist.type_id, hist.sub_type_id
SELECT count(a1.transaction_id), a1.type_id, a1.sub_type_id
FROM (SELECT transaction_id,MAX(settlement_date_time) MAX_settlement_date_time FROM transaction_history GROUP BY transaction_id)maxdts
INNER JOIN transaction_history a1 ON a1.transaction_id= maxdts.transaction_id AND a1.settlement_date_time = maxdts.MAX_settlement_date_time
group by a1.type_id, a1.sub_type_id