limit与分页
在SQL中,limit用于限制返回的结果行数。LIMIT语句可以用于SELECT查询,用于限制查询结果集的行数,从而在处理大型数据集时,减少数据库的负载,提高查询的性能
基本语法如下
1 | SELECT * FROM table_name LIMIT [offset],row_count; |
limit在实际应用中常用于分页查询
举个例子
现在我有一个article表,想要做到文章分页展示的功能,每一页展示10篇文章
1 | //表结构如下 |
深分页
查询结果集中的某个位置之后的记录,即查询结果集的偏移量很大的情况。这样需要扫描的数据量就很大,可能导致查询的性能变得很低下
如何避免深分页的问题
- 使用更小的偏移量:比如将偏移量从10000降低到100
- 使用分页键
- 缓存结果集,在内存层面进行返回
- 分库分表,减少每个表的数据量大小
分页键
分页键(pagination key)是一种用于分页查询的技术,它可以帮助我们在大数据集合中快速定位到需要查询的数据段。分页键通常是一个唯一的标识符,可以表示查询结果集中的某一行。在使用分页键的时候,通过查询分页键来定位结果集的起始位置,从而避免了偏移量很大的情况,也就是避免了SQL深分页的情况。
举个例子,假设我们需要查询一个包含一百万行数据的用户表,并且我们需要查询第500001到第500100行的数据。如果用偏移量的方式进行查询,需要查询前5000000行数据才能获得我们需要的结果,这将导致查询性能非常低下。而使用分页键的方式,可以在查询时直接指定分页键的值,从而定位到结果集的起始位置,避免了大量的数据扫描。
使用分页键的时候,我们需要选择一个合适的字段作为分页键,并确保该字段具有唯一性。通常情况下,自增长主键或者时间戳字段都是比较好的选择,分页键适用于有序数据集的分页查询
下面有一个具体的栗子
假设我们有一个包含大量文章的表,每篇文章都有一个唯一编号id和发布时间publish_time两个字段。我们需要查询发布时间在2022年1月1日到2022年3月31日之间的文章,并按照发布时间进行排序,每页显示十篇文章,显示第六页的数据
1 | 1.选择分页键:根据查询条件,我们选择publish_time作为分页键 |