231 字
1 分钟
面试鸭-MySQL中如何解决深度分页的问题?
MySQL中如何解决深度分页的问题?
深度分页问题是指:分页查询的时候,去获取比较后面页数时,速度会变得很慢,查询页数越大效率越慢。
比如:select * from a where name = 'xx' order by id limit 1000000,10; 查询时很慢是因为,这种写法MySQL会扫描前1000000条数据然后丢弃掉,导致浪费时间。
解决思路思路有三种:
- 使用子查询优化SQL语句:通过子查询去二级索引中查找对应位置,再拿找到的id回表查找对应位置。
- 使用游标分页:每次查询都返回当前页的最大id,下次查询带上这个id作为起点,MySQL可以直接不用扫描前面的数据就定位到起始位置。
- 使用搜索引擎方式:把数据同步到Elasticsearch,用search_after做深度分页。
问题
面试鸭-MySQL中如何解决深度分页的问题?
http://www.shineacz.top/posts/面试鸭-mysql中如何解决深度分页的问题/