django分页模块的效率

307183927 发布于 2012/06/06 10:36
阅读 1K+
收藏 0

@flynewton 你好,想跟你请教个问题:

无意看到别人blog的分析
djanog queryset的惰性利用了 Python 的分片(slicing)功能。下面的代码并没有先请求所有的记录,然后对所需要的记录进行分片,而是在实际的查询中使用了 5 作为 OFFSET、10 作为 LIMIT,这可以极大地提高性能
但是实际这个效率确实不高

SELECT `icbase_ic`.`id`, `icbase_ic`.`name`, `icbase_ic`.`mfr_id`, `icbase_ic`.`description` FROM `icbase_ic` ORDER BY `icbase_ic`.`name` ASC LIMIT 25 OFFSET 617400
以name排序,用时37634.07ms

如果id排序,用时7000ms
如果 OFFSET 617400改为where id>617400,只用不到1s,

这个是django.core.pagination分页时遇到的效率问题,请教如何才能提高效率
django有没更好的分页模块。

加载中
0
307183927
307183927
改好了,平均翻页30ms,300w数据测试
修改django/db/models/sql/compiler.py第83行增加        if with_limits and self.query.low_mark:            result.append('where id > %d' % self.query.low_mark)注释#result.append('OFFSET %d' % self.query.low_mark) 使得查询变为SELECT icbase_ic.id, icbase_ic.name, icbase_ic.mfr_id, icbase_ic.description FROM icbase_ic WHERE id > 1277750 ORDER BY icbase_ic.name ASC LIMIT 25 
0
307183927
307183927
求高手解答啊,用django的应该遇到过这问题吧
0
wx---每日佳选
wx---每日佳选
这和django没关系吧。
0
307183927
307183927

那怎么才能解决

返回顶部
顶部