加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

django 分页提取速度太慢原因分析及优化/解决方法

发布时间:2020-12-15 17:15:14 所属栏目:大数据 来源:网络整理
导读:在django中可以实现快速分页,但是数据到了几百万时就必须要优化才能有效的合理的分页,否则每次分页提取数据速度太慢了。 django?分页的代码 User.objects.all()[:3]类似的如:select?*?from?User?limit?3,10000000,从第3条开始取数据,取10000000条(1000

在django中可以实现快速分页,但是数据到了几百万时就必须要优化才能有效的合理的分页,否则每次分页提取数据速度太慢了。

django?分页的代码

User.objects.all()[:3]

类似的如:select?*?from?User?limit?3,10000000,从第3条开始取数据,取10000000条(10000000大于表中数据条数)

可以从上述代码得知,django分页实际上使用mysql的limit语句,这种语句在数量少的时候,运算非常快,但是超过一定数量是运算速度线性增长。

limit 100000,20的意思是扫描满足条件的100020行,不要前面的100000行,返回最后的20行数据,那么问题就出现在这里。

如果limit 1000000,30,就需要扫描1百万行数据。所以分页数据时会在这里阻塞。

总结:

  1. limit语句的查询时间与起始记录的位置成正比

  2. mysql的limit语句是很方便,但是对记录很多的表并不适合直接使用。

优化方案:

利用表的覆盖索引加速分页查询。大家知道利用所以查询语句中如果包含索引列(覆盖索引),那么查询速度会很快。

SELECT?*?FROM?`format_demo`?limit?1000000,20;???#?耗时34s

SELECT?id?FROM?`format_demo`?limit?1000000,20;????#?耗时5秒??速度提升7倍


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读