sql优化典型案例-查询在同一个分组下的用户
在我看这本书时《mysql性能调优与架构设计》,作者简朝阳,其中提到了一个典型案例,我简化如下:
tuser用户表,只存一个昵称字段,如下图所示
群组表,记录了哪些用户,加入了哪些群组,以及入群的时间,结构如下
对这两张表,我填充了些数据。tuser表和有130万条数据,tuser_tgroup表有137万条数据。
现在有个简单的需求是:查询出tgroup_id=1的用户id、昵称。按入群时间倒序排列,只取前20个用户。
很容易想到两种不同写法的sql:
方案一:
方案二
再看看explan的分析
方案一:
方案二:
书上说是方案二明显优化方案一。原因主要是,方案一是在join之后再取limit的,导致用户表需要和68万多条数据进行join。
而方案二是先取limit,再来join,用户表就只需要和20条数据进行join.
我实测时,方案二的查询速度,确实也略快一点。
这里把测试表和结构和数据放上来(用navicat导出的),百度网盘: