mysql 表设计/慢查询求解,详细场景见正文

nulIptr



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 秒左右,该怎么优化呢。

shenjinpeng:20w 数据 x 几百辆车, 这么点数据要 10s , 感觉不太对 . 应该是 Vin 字段的问题, between 只有几百条数据, 有没有索引影响不大 . 帖个 sql 执行计划看看

linuxvalue:看这个命名好难受 大小写乱用 毫无规范

huntcool001:explain ANALYZE 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

把这个结果贴一下

mysql 这种情况怎么查?

qaqLjj: 如图,怎么查询同时掌握了第一张表所有技能的员工呢? 也就是说,希望的结果如下: emp 神崎 相田

mysql 查询

shimingzhoudf:A 表有 1,2,3,4 个字段 我现在查询结果需要是这样 表名 中文名 1 2 3 4 数据 x x x x x ... ... .. .. .. .. 其实中文名就是 4 字段的值 我看别人这样写过: select 4 中文名, * where 表名; 但我自己用老报语法错误shimingzhoudf:语法是这样 select…

有关 Mysql 优化内存该如何设置的问题

black11black:如题,目前有一台 32G 内存的机器,想跑个单机 mysql 服务 想问一下 mysql 有没有自动限制内存的措施,比如当内存超过 32G 的时候会自动清理缓存之类的,或者有什么选项可以限制比如到 20G 内存就释放缓存 印象中以前似乎出现过小内存机器上 mysql 因为爆内存挂了的事opengps:数据库应用( mysql,sql…

一个 mysql 库容纳多少个表会比较明显的影响速度?

l890908:理论上来说基本上没有限制(42 亿多),但是同时访问的表越多,文件描述符就越多,从操作系统角度来说还是有影响的;那么在实操过程中多少个表会比较明显的影响速度?qiayue:可以不用考虑极限了,按照业务分库分表即可。举例我们的统计 SDK,每个接入的 app 都给一个单独的库,这样不同 app 互不影响。

对于多字段的组合搜索条件, mysql 应该怎么设置索引

dajj:假设有一个列表界面, 有 10 个搜索条件, 每个条件对应表的某个字段,都是精确搜索。 但是表的数据有 100 万条。 这种情况下,复合索引无法设置,因为字段组合太多. 那么,有没有通用的解决方案,可以设置索引,让任何条件的搜索都能很快?v2exblog:同问