开篇明议
昨天一家公司的面试官问了个问题,有2个表就是快递详情表和快递轨迹表,每天有百万个
快递,数据表的每张表少说都不少于千万条,问题是怎么根据用户的id快速查找用户的快递单
和运动轨迹?最好查询时间控制在600毫秒下。
这是一个一对多的关系,就一个快递单子有多个轨迹点。
测试机子环境
OS: homestead:8.0.1(debian) 64位内存 : 8Gmysql version: 5.7.27
建表和添加测试数据
1 | create database test; -- 测试数据库 |
有1亿条左右的数据,预计没有半天时间是生成不完的。

由于innodb要额外处理事务的索引,相对来说MyISAM 更快

从结果来说,主键联表查找有1千8百多万条数据表,和1亿多条的详情表中查询的速度是很快的。
回到原来的问题,根据用户id即uid在千万条快递单子和上亿的轨迹查找用户的快递和快递详情。

结果是:0.001s.
由于索引的起作用,仅扫描1到11行的数据。