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