2023/9/15(mysql回表,查询速率问题)

46 阅读1分钟

如何避免回表,索引下推等概念

limit,offset导致的查询变慢情况

44dd1619a41ca2e99b56c60b240a6c43.png

b49b720eaf47432c8eb9942913234967.png 数据库情况:库中有120w条数据

下面进行查询

b49b720eaf47432c8eb9942913234967.png limit 0,10的时候发现只需要耗时1ms

c66a655c0f57578113562ff6038bbc44.png

limit 1170600,10 的时候发现耗时1.3s

为什么会导致这种结果?因为产生了回表操作

再来看一组情况

0a7be47472133a803cbe258a0ac6643c.png 截图转存失败,建议直接上传图片文件

这里只对主键索引id进行查询,发现耗时819ms

如何优化select *这种情况?

d5da2d8827bb5bb2e9deecbb392e0e5f.png 做了子查询之后查询会变得更快,而且不会影响原来的结果展示

子查询中走了主键索引,并且只查询出了id,并不需要进行回表。

大大减少前面需要回表的时间

分析sql

b124d611e8f864bc1a0b09fb50baa4da.png

5f1a69a950ea63bb6b612f2215c41ad0.png