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

在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百万行数据。所以分页数据时会在这里阻塞。

总结:limit语句的查询时间与起始记录的位置成正比

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

优化方案:

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值