请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Django admin 分页显示存在性能问题

在Django 后台中,使用 list_per_page = 10,分页可以生效,在本地速度也很快。

但当数据总量到了1000+条,list_per_page=10,的速度就很慢,尤其是在翻页的时候,在本地速度还可以,但是在服务器上,就很慢了。开始以为是数据库问题,后来发现,最立竿见影的方法,就是临时升宽带,从5M升到10M,速度就快了很多。但这不是长久之计。

老师,请问这种问题应该怎么处理?

正在回答

1回答

MySQL的OFFSET和LIMIT分页性能问题主要是由于OFFSET的操作需要扫描整个结果集,而LIMIT只需要返回指定数量的行。因此,OFFSET的值越大,扫描的行数就越多,性能也就越差。

以下是一些优化MySQL OFFSET和LIMIT分页性能的方法:

  1. 使用主键或唯一索引进行排序,这样MySQL可以直接使用索引进行查询,而不需要扫描整个结果集。

  2. 使用子查询,将OFFSET和LIMIT应用于子查询而不是主查询。

  3. 使用缓存,将查询结果缓存到缓存服务器中,这样可以减少数据库的查询次数。

  4. 使用游标,可以避免一次性返回大量数据,而是逐个返回数据。

  5. 对于大数据量的分页查询,可以考虑使用分区表技术,将数据分散到多个表中,这样可以减少单个表的数据量,提高查询性能。

    这些都需要理解好索引原理,可以看一下我的 https://www.bilibili.com/video/BV15V411p7pi/

总之,优化MySQL OFFSET和LIMIT分页性能需要综合考虑多个因素,包括数据量、查询条件、索引、缓存等,选择合适的优化方法才能达到最佳性能。


0 回复 有任何疑惑可以回复我~
  • 提问者 979811597 #1
    好的,谢谢老师,一定认真学习。在调试的过程中,阴差阳错的把这个问题解决了。把list_filter这一行注释了,效果立竿见影,原因可能是把一些非过滤字段也一股脑放进去了,比如name,material_id都作为了过滤字段。
    回复 有任何疑惑可以回复我~ 2023-06-14 00:50:53
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信