请不要将OFFSET和LIMIT用于分页

随着时代的发展,每个新企业家都希望建立下一个Facebook,并结合收集每个可能的数据点以提供更好的机器学习预测的心态,作为开发人员,我们需要比以往更好地准备我们的API,以提供可靠,高效的端点,应该能够毫不费力地浏览大量数据。
如果您已经进行了一段时间的后端或数据库体系结构,则可能已经完成了分页查询
OFFSET和LIMIT有什么问题?
正如我们在前面的段落中简要探讨的那样,OFFSET和LIMIT非常适合于数据使用量很少甚至没有的项目。
当数据库开始收集的数据量超出服务器可以存储在内存中的数据量时,仍然会出现问题,您仍然需要对它们全部进行性能分页。
为此,每次您请求分页时,数据库都需要执行低效的全表扫描(插入和删除操作可能同时发生,我们不希望数据过时!)。
什么是全表扫描?全表扫描(也称为顺序扫描)是在数据库中进行的扫描,其中顺序读取表中的每一行,然后检查遇到的列是否符合条件。由于从磁盘进行大量的I / O读取(包括多次搜寻)以及昂贵的磁盘到内存传输,这种类型的扫描被认为是最慢的。
这意味着,如果您有100.000.000用户,而您要求的偏移量为50.000.000,则它将需要获取所有这些记录(甚至不需要!),将它们存储在内存中,只有在获得之后, LIMIT中指定了20个结果。
因此,要在网站上显示这样的分页:
50.000至50.020之100.000
它首先需要获取50.000行。看看这效率低下吗?

    我建议在要分页的表中使用自动递增的主键,即使只是出于分页的目的。
    请不要忘记学习索引。并解释查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值