在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百万行数据。所以分页数据时会在这里阻塞。
总结:
优化方案:
利用表的覆盖索引加速分页查询。大家知道利用所以查询语句中如果包含索引列(覆盖索引),那么查询速度会很快。
如
SELECT * FROM `format_demo` limit 1000000,20; # 耗时34s SELECT id FROM `format_demo` limit 1000000,20; # 耗时5秒 速度提升7倍
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。