sql优化典型案例-查询在同一个分组下的用户

在我看这本书时《mysql性能调优与架构设计》,作者简朝阳,其中提到了一个典型案例,我简化如下:

tuser用户表,只存一个昵称字段,如下图所示

群组表,记录了哪些用户,加入了哪些群组,以及入群的时间,结构如下

对这两张表,我填充了些数据。tuser表和有130万条数据,tuser_tgroup表有137万条数据。

现在有个简单的需求是:查询出tgroup_id=1的用户id、昵称。按入群时间倒序排列,只取前20个用户。

很容易想到两种不同写法的sql:

方案一:

方案二

再看看explan的分析

方案一:

方案二:

书上说是方案二明显优化方案一。原因主要是,方案一是在join之后再取limit的,导致用户表需要和68万多条数据进行join。

而方案二是先取limit,再来join,用户表就只需要和20条数据进行join.

我实测时,方案二的查询速度,确实也略快一点。

这里把测试表和结构和数据放上来(用navicat导出的),百度网盘:

https://pan.baidu.com/s/1MiFtvHmTBCeL6Xog_OU_GQ

发布了17 篇原创文章 · 获赞 15 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/junzi528/article/details/104094005