项目是一个django的后台系统,有一个表大概有180万条数据,打开页面基本要10多秒,自己都要受不了了。第一次尝试对项目进行优化。

首先查到用django-debug-toolbar查询了下那些sql语句耗时。

django-debug-toolba文档:https://django-debug-toolbar.readthedocs.io/en/latest/installation.html

可以看到sql查询一共耗时大概10秒。

主要是这四条sql语句耗时:

1、django分页sql:

SELECT COUNT(*) AS `__count` FROM `push_rule` WHERE (`push_rule`.`deleted` = 0 AND `push_rule`.`id` > 0)

2、 自定义ModelAdmin中list_filter的字段sql:

SELECT DISTINCT `push_rule`.`operator` FROM `push_rule` WHERE (`push_rule`.`deleted` = 0 AND `push_rule`.`id` > 0) ORDER BY `push_rule`.`operator` ASC

3、自定义ModelAdmin的date_hierarchy选项sql:

SELECT MAX(`push_rule`.`insert_time`) AS `last`, MIN(`push_rule`.`insert_time`) AS `first` FROM `push_rule` WHERE (`push_rule`.`deleted` = 0 AND `push_rule`.`id` > 0)

4、还是自定义ModelAdmin的date_hierarchy选项sql:

SELECT DISTINCT CAST(DATE_FORMAT(`push_rule`.`insert_time`, '%Y-%m-%d 00:00:00') AS DATETIME) AS `datetimefield` FROM `push_rule` WHERE (`push_rule`.`deleted` = 0 AND `push_rule`.`id` > 0 AND `push_rule`.`insert_time` BETWEEN '2019-01-01 00:00:00.000000' AND '2019-12-31 23:59:59.999999' AND EXTRACT(MONTH FROM `push_rule`.`insert_time`) = 7 AND `push_rule`.`insert_time` IS NOT NULL) ORDER BY `datetimefield` ASC

第一条暂未优化。

第二条重写一个OperatorFilter:

不从大表push_rule里查询文章的Operaor,直接从django自带的User模型类中查询Operator,User模型里的auth_user表一共也就几百个人,几乎是不用耗时的。不过也也会有点问题,User中展示的是所有user,而push_rule查到的是所有发布的文章中的所有所有作者,有些差别,不过问题不大。

OperatorFilter代码:

from django.contrib.auth.models import Userclass OperatorFilter(admin.SimpleListFilter):title = _('Who')parameter_name = 'operator'def lookups(self, request, model_admin):staff_operator_set = User.objects.filter(is_staff=1)return [(c,c) for c in sorted(staff_operator_set)]def queryset(self, request, queryset):return queryset.filter(operator=self.value()) if self.value() else queryset

设置list_filter:

list_filter  = (OperatorFilter)

第三条第四条都是date_hierarchy的问题所以一起处理,这个date_hierarchy最耗时间:

搜索到了大神写好的解决方案:

https://hakibenita.com/scaling-django-admin-date-hierarchy?source=post_page---------------------------

这位大神写了好多django优化的文章。

没看原理,直接拿来用了。

1、安装写好的包django-admin-lightweight-date-hierarchy:

pip install django-admin-lightweight-date-hierarchy

安装要求:

Python 2.7, 3.4, 3.5, 3.6

Django 1.9, 1.10, 1.11, 2.0

2、注册INSTALL_APP

INSTALLED_APPS = ('django_admin_lightweight_date_hierarchy',
)

3、自定义ModelAdmin中设置:date_hierarchy_drilldown = False

class MyModelAdmin(admin.ModelAdmin):date_hierarchy = 'created'date_hierarchy_drilldown = False

到此本次优化基本结束:

再看一下耗时:

优化到2秒了,只剩django分页sql的比较耗时了。

django的admin速度慢优化:date_hierarchy、list_filter相关推荐

  1. Django在admin.py中设置date_hierarchy时报错

    今天对admin后台管理系统进行了设置,在对date_hierarchy这一项设置的时候,抛出了这样的异常: 1 Database returned an invalid value in Query ...

  2. 【django之admin,单例模式】

    一.admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTAL ...

  3. 【Django】admin.ModelAdmin的源码-20220105

    options.py 为了解admin.ModelAdmin的源码去阅读options.py.阅读源码的目的,是为了更好的重写option.py来实现admin的客制化功能. BaseModelAdm ...

  4. Django(part31)--admin后台数据库管理

    学习笔记,仅供参考 文章目录 admin后台数据库管理 使用步骤 自定义后台管理数据表 配置步骤 模型管理器类 模型管理器的使用方法 ModelAdmin模型管理器类中的高级管理功能 数据库表管理 修 ...

  5. Django框架admin后台数据库管理

    创建超级用户 django 提供了比较完善的后台管理数据库的接口,可供开发过程中调用和测试使用 django 会搜集所有已注册的模型类,为这些模型类提拱数据管理界面,供开发者使用 使用步骤: 创建后台 ...

  6. 【工程实践】Django系列-Admin站点管理(8)

    1.概述 1.1 内容发布 添加.修改.删除数据库中的内容.站点管理就是为了有一个可视化界面,方便将数据进行展示,方便对数据库中的数据进行操作和管理. 1.2 公共访问 2.配置Admin应用 在se ...

  7. django的admin组件使用详解

    一.admin组件介绍 admin作为django的超级用户,权限包括注册目录列表,注册用户权限,注册需要维护的数据库信息等. 二.admin组件的使用 1. 启动项目 访问localhost:800 ...

  8. Mysql中查询速度的优化

    2019独角兽企业重金招聘Python工程师标准>>> mysql中查询速度的优化 1.查看每一个表的数据量 2.left join的时候尽量减少表的大小,通过临时表,查询条件去限制 ...

  9. 自定义Django的admin界面

    第6章介绍了Django的admin界面,现在是回过头来仔细看看这个的时候了 我们前面讲的几次admin是Django的"杀手级特性",并且大多数Django开发人员很快爱上了它节 ...

最新文章

  1. webform登录操作中正则表达式运用
  2. 随便写点时间相关的模块
  3. UNITY 多SCENE加载与编辑
  4. php csv 简单的导入
  5. libsvm matlab 调参数,matlab – 使用libsvm调整svm
  6. redis3.0 java spring_spring整合redis以及使用RedisTemplate的方法
  7. mysql or全表_mysql or条件可以使用索引而避免全表
  8. python的重点_python知识点
  9. 基于spi FLASH的嵌入式文件系统 littlefs(转)
  10. python人门指南小说-致Python初学者们 - Anaconda入门使用指南
  11. chinapub matlab,MATLAB 5手册
  12. 酷派5890刷recovery详细教程
  13. linux脚本菜鸟教程,菜鸟教程之shell _1
  14. 手机震动驱动-android
  15. mongolass populate用法
  16. as3 俄罗斯方块 优化 美化版
  17. 点云缩放—python open3d
  18. Win10 WiFi连接不上,如何重新配置DNS地址
  19. pve万兆网卡驱动_家庭万兆方案性价比之选,10G网速不是梦!战在当下,布局未来!...
  20. OpenCV-趣味小游戏-手掌击球

热门文章

  1. 单片机高级裸机编程(一)-- 数据驱动程序
  2. python爬虫初学实战——免登录爬取easyicon里的vip图标(2)
  3. 微信企业转账JAVA版(包括:1,转账个人零钱;2,转账个人银行卡;3,微信官网的SDK3.0.9存在的支付问题)
  4. 网上python培训骗局-培训三个月拿“高薪”?起底Python“速成班”忽悠大法
  5. stm32驱动点阵屏显示图片
  6. 防静电地坪漆检测怎么做?
  7. html三栏布局的方式,12种方式实现三栏布局/圣杯布局
  8. 语义分割数据集:Cityscapes的使用
  9. java 解密pdf_java – pdfbox:试图解密PDF
  10. 添加集控程序的守护进程一般操作【Linux,CentOS7.5】