mysql 表设计/慢查询求解,详细场景见正文
CREATE TABLE `vehicle` ( `Id` char(36) NOT NULL COMMENT 'Id Guid', `Dr` int(11) NOT NULL COMMENT '', `OrganizationId` bigint(20) unsigned DEFAULT NULL, `DeviceNo` varchar(20) DEFAULT NULL, `LicensePlateNo` varchar(10) DEFAULT NULL, `vin` varchar(50) DEFAULT NULL, PRIMARY KEY (`Id`), KEY `vehicle_vin_IDX` (`vin`,`Dr`,`OrganizationId`,`LicensePlateNo`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ; CREATE TABLE `trip` ( `Id` char(36) NOT NULL COMMENT '记录 Id', `Vin` varchar(50) NOT NULL COMMENT '车辆 vin', `EndTime` datetime NOT NULL COMMENT '行程结束时间', -- 还有其余二十个字段 PRIMARY KEY (`Id`), KEY `trip_Vin_IDX` (`Vin`,`EndTime`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='行程数据明细'; select v.OrganizationId, v.Vin, v.LicensePlateNo,s.* from vehicle `v` join trip `s` on `s`.`Vin` = `v`.`Vin` where v.dr = 0 and v.OrganizationId between 10000000000000000 and 19999999999999999 order by EndTime desc limit 0, 10
先上 sql 语句 业务场景是车辆表大概存了几百辆车,行程跟车辆是多对一的关系,trip 表有 20w 条数据,还在持续增长。。 OrganizationId 为了兼容组织结构层级关系,上级部门能看到下级部门的数据,设计成 18 位 10 进制数字,从高位起每 2 位算一个层级,最多 9 级,查询的时候就是上面 select 语句这样
但问题是有了范围查询排序似乎就走不了索引了,现在这个查询要 10 秒左右,该怎么优化呢。