重庆网站建设仿站网页升级紧急通知狼急通知

news/2025/9/24 3:55:18/文章来源:
重庆网站建设仿站,网页升级紧急通知狼急通知,排行榜网站,免费素材网png前言 对于网站和Web APP来说#xff0c;相同的类型的产品#xff0c;响应速度越好#xff0c;那么用户量就越高。不可否认的是#xff0c;响应速度是用户黏粘性最好的方式之一#xff0c;但往往不知道如何下手解决#xff0c;希望这篇文章可以给予你一些思路 对于网站和…前言 对于网站和Web APP来说相同的类型的产品响应速度越好那么用户量就越高。不可否认的是响应速度是用户黏粘性最好的方式之一但往往不知道如何下手解决希望这篇文章可以给予你一些思路 对于网站和Web APP来说最影响网站性能的就是数据库查询了因为而查询返回的数据集非常大时还会占据很多内存。这里从django orm的角度来探索数据库查询的优化 一、依据减少缓存的角度优化利用QuerySet惰性 网站和Web APP对于数据的常规处理方式肯定是数据库存储查询反复从数据库读写数据很耗时间和计算资源。也因此开发者们设计制作出了多个数据库连接方式其中在Django框架中ORM(语法有哪些)占很大比重。通过它可以使用filter, exclude, get等方法进行数据库查询从数据库中查询出来的结果一般是一个集合这个集合叫就做 QuerySet。QuerySet是惰性的QuerySet自带缓存 注Object Relational Mapping即对象关系映射是在pymysq之上又进行了一层封装对于数据的操作我们无需再去编写原生sql取代代之的是基于面向对象的思想去编写类、对象、调用相应的方法等ORM会将其转换/映射成原生SQL然后交给pymysql执行 惰性即为当被执行(print、if、len)时才会进行数据库查询这样做的目的是防止无效数据库操作。减少数据库交互 # 惰性查询如果只是书写了orm语句在后面根本没有用到该语句所查询出来的参数那么orm会自动识别出来直接不执行。# 举例res models.Book.objects.all() # 这时orm是不会走数据库的print(res) # 只有当要用到的上述orm语句的结果时才回去数据库查询。 QuerySet被执行后其查询结果会载入内存并保存在QuerySet内置的cache中。再次使用就不需要重新去查询了。减少缓存如果查出的 QuerySet只用一次可以使用 iterator() 去来防止占用太多的内存if与exists()都可以判断查询结果是否存在但两者使用却又很大的不相同。if会触发整个queryset的缓存而exists()只会返回True或False检视查询结果是否存在而不会缓存查询结果len()与count()方法均能统计查询结果数量。count()是从数据库层面直接获取查询结果数量而不需要返回整个queryset数据集一般来说会更快。len()会导致queryset的执行需要先将整个数据集载入内存方可计算但如果queryset数据集已经缓存在内存当中了len()则会更快当查询到的queryset非常大时会占用大量的内存使用values和values_list按需提取数据(1个或个别多字段而非全字段)。values和values_list返回的是字典形式字符串数据而不是对象集合only(A)包含与查A走一次数据库查B走多次数据库。defer(A)不包含与,查A走多次数据库查B走一次数据库相比于使用save()方法update()不需要先缓存整个querysetaggregate和annotate方法主要用于组合查询我们使用aggregate完成对查询集(queryset)的某些字段进行计算使用annotate进行分组并追加统计字段,如 class Student(models.Model):name models.CharField(max_length20)age models.IntegerField()hobbies models.ManyToManyField(Hobby)class Hobby(models.Model):name models.CharField(max_length20)from django.db.models import Max, Min, Avg, Sum, Count #####################aggregate应用############################### # 学生平均年龄, 自定义key Student.objects.aggregate(average_age Avg(age)) # { average_age: 12 }# 同时获取学生年龄均值, 最大值和最小值, 返回字典 Student.objects.aggregate(Avg(age‘), Max(age‘), Min(age‘)) # { age__avg: 12, age__max: 18, age__min: 6, }# 根据Hobby反查学生最大年龄。查询字段student和age间有双下划线 Hobby.objects.aggregate(Max(student__age)) # { student__age__max: 12 }#####################annotate应用############################### # 按学生分组统计每个学生爱好数量并自定义key Student.objects.annotate(hobby_count_by_studentCount(hobbies))# 按爱好分组再统计每组学生最大年龄 Hobby.objects.annotate(Max(student__age))#####################annotatefilter应用############################### # 先按爱好分组再统计每组学生数量, 然后筛选出学生数量大于1的爱好。 Hobby.objects.annotate(student_numCount(student)).filter(student_num__gt1)# 先按爱好分组筛选出以d开头的爱好再统计每组学生数量。 Hobby.objects.filter(name__startswithd).annotate(student_numCount(student‘))#####################annotateorder_by应用############################### # 先按爱好分组再统计每组学生数量, 然后按每组学生数量大小对爱好排序。 Hobby.objects.annotate(student_numCount(student‘)).order_by(student_num)# 统计最受学生欢迎的5个爱好。 Hobby.objects.annotate(student_numCount(student‘)).order_by(-student_num)[:5]#####################annotatevalues应用############################### # 按学生名字分组统计每个学生的爱好数量。 Student.objects.values(name).annotate(Count(hobbies))你还可以使用values方法从annotate返回的数据集里提取你所需要的字段如下所示: # 按学生名字分组统计每个学生的爱好数量。 Student.objects.annotate(hobby_countCount(hobbies)).values(name, hobby_count)select_relatedprefetch_related使用 假设现在有文章表(Article)、类别表(Category)、标签表(Tag)。它们关系是文章与类别是一对多关系文章与标签是多对多关系 常规写法错倒是没错。然而使用Article.objects.all()查询得到的只是Article表的数据并没有包含Category表和Tag表的数据。因此每一次打印article.category.name和tag.name都会重新去查询一遍Category表和Tag表造成了很大不必要的浪费 # 查询类别、标签信息 articles Article.objects.all() for article in articles:print(article.title)print(article.category.name)for tag in article.tags.all():print(tag.name)标准写法select_related可查询一对多、一对一的关系不可以多对多关系。处理的方式是inner join连表。实现打印类别是无需再去查数据库因为数据已经一次性获取出来了 # 查询类别 articles Article.objects.all().select_related(category)# 获取id13的文章对象同时获取其相关category信息 Article.objects.select_related(category).get(id13)# 获取id13的文章对象同时获取其相关作者名字信息 Article.objects.select_related(author__name).get(id13)# 获取id13的文章对象同时获取其相关category和相关作者名字信息。下面方法等同 Article.objects.select_related(category, author__name).get(id13) Article.objects.select_related(category).select_related(author__name).get(id13)# 使用select_related()可返回所有相关主键信息,all()非必需 Article.objects.all().select_related()# 获取Article信息同时获取blog信息,filter方法和selected_related方法顺序不重要 Article.objects.filter(pub_date__gttimezone.now()).select_related(blog) Article.objects.select_related(blog).filter(pub_date__gttimezone.now())标准写法prefetch_related弥补多对多下的数据查询 # 查询类别及标签 articles Article.objects.all().select_related(category).prefecth_related(tags)# 文章列表及每篇文章的tags对象名字信息 Article.objects.all().prefetch_related(tags__name)# 获取id13的文章对象同时获取其相关tags信息 Article.objects.prefetch_related(tags).get(id13)用Prefetch方法可以给prefetch_related方法额外添加额外条件和属性 # 获取文章列表及每篇文章相关的名字以P开头的tags对象信息 Article.objects.all().prefetch_related(Prefetch(tags, querysetTag.objects.filter(name__startswithP)) )# 文章列表及每篇文章的名字以P开头的tags对象信息, 放在article_p_tag列表 Article.objects.all().prefetch_related(Prefetch(tags, querysetTag.objects.filter(name__startswithP)), to_attrarticle_p_tag )F函数不引入内存 更新数据时 例1 article Article.objects.get(title文章2) article.thumb_count 1 article.save()例2 使用F()函数 Article.objects.filter(title文章1).update(thumb_countF(thumb_count)1)# 很明显使用F()函数的执行效率会更高只需要一条sql完全的数据库操作而例1则需要先查询缓存然后再更新 # 例1的方法是存在竞态条件的如第一个线程完成取值、更新值、保存新值而第二个线程操作还是使用就的值来进行操作使用F()函数的话因为是数据库层面的原子操作第二个线程再来取值那也是取到更新后的值了表达式应用时 # 同一数据不同字段比较 article Article.objects.filter(thumb_count__gtF(view_count))# 两个操作数都是常数和F()函数的加、减、乘、除、取模、幂计算等算术操作 article Article.objects.filter(view_count__gtF(thumb_count) * 2)# 配合annotate使用 article Article.objects.annotate(all_countF(view_count) F(thumb_count))二、利用索引 合适的索引可以加快数据的检索速度。无论是在Django还是在原生SQL查询上都支持检查某条语句是否有用到索引语法为explain 2.1、Django中 # 统计一个查询所消耗的执行时间更好地优化查询结果 Blog.objects.filter(titleMy Blog).explain(verboseTrue)2.2、原生SQL中 explain select * from user where user_no 00022139三、ORM相较于原生SQL语法有性能欠缺 注Django也支持原生SQL语法:raw 3.1、raw语法实现 3.2、游标实现 from django.db import connectionwith connection.cursor() as cursor: cursor.execute(select * from user) data cursor.fetchall()四、结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何注册网站的名字网页制作教程零基础合集

Typora用法小结 文章目录Typora用法小结1 Typora简介2 Markdown介绍3 Typora常用快捷键Typora快捷键整合换行符引用文字无序列表有序列表任务列表代码块数学表达式插入表格脚注分割线目录(TOC)跨度元素链接内部链接参考链接网址图片斜体加粗加粗斜体代码…

阳谷网站建设邢台12345网站

NumPy NumPy(Numerical Python的简称)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵&am…

长沙网站设计我选刻单位网站建设存在问题情况汇报

前言 LNMP架构是一种用于搭建Web服务器环境的解决方案,它由Linux、Nginx、MySQL(或MariaDB)、PHP(或Python或Perl)这四个开源软件组成。这种架构通常用于搭建高性能的网站和Web应用程序。 目录 一、编译安装nginx …

做搜狗手机网站优网站如何备份

目录 前言1. 基本知识2. 注意事项3. 拓展 前言 以往的Java基本知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新)Mybatis从入门到精通&#xf…

广州网站设计 信科网络做公司网站域名怎么做记账凭证

一、第一章 1、常见的RTOS,嵌入式操作系统的特点 RTOS就是实时操作系统。根据响应时间的不同,可分为以下3类: (1)强实时嵌入式操作系统 响应时间:微妙或毫秒 (2)一般实时…

印度网站后缀小说推文推广平台

类 ResourceBundle 的核心作用就是用来加载指定的属性资源文件(.properties 文件),其作用有点类似类 Properties。 public void test() {Locale locale new Locale("zh", "CN");// 根据指定的语言环境和基名加载资源文件…

权重较高网站网站开发后台需要自己写吗

STM32 在 Windows 上的交叉编译二 调试 在上一篇博客 《在Windows上交叉编译STM32(环境搭建)》 ,已经让 CubeMX 生成的工程成功编译,并下载到板子上了。 这篇博客主要继续介绍接下来的步骤,调试。硬件是使用的 ST-LINK ,别的也无…

百城建设提质工程网站小程序商城开发方案

文章目录 Vue3样式绑定1. class 属性绑定1.1 v-bind:class 设置一个对象,从而动态的切换 class1.2 在对象中传入更多属性用来动态切换多个 class1.3 直接绑定数据里的一个对象1.4 绑定一个返回对象的计算属性。这是一个常用且强大的模式1. 5 数据语法1.6 errorClass…

wordpress网站字体凡科快图官方

一、安装依赖分析工具 npm install webpack-bundle-analyz 二、修改webpack.config.js文件 1、导入上面下载的包 2、在plugins里创建实例 三、启动打包命令 npm run build 会弹出如下界面: 四、优化 1、通过CDN导入react-dom文件 修改webpack.config.js文件里…

青岛做外贸网站建设平面设计免费模板网站

Python中的pandas模块进行数据分析。 接下来pandas介绍中将学习到如下8块内容:1、数据结构简介:DataFrame和Series2、数据索引index3、利用pandas查询数据4、利用pandas的DataFrames进行统计分析5、利用pandas实现SQL操作6、利用pandas进行缺失值的处理7…

做网站用什么软件做上海怎么做seo推广

内容参考于:易道云信息技术研究院VIP课 上一个内容:显示游戏数据到小助手UI 码云地址(游戏窗口化助手 分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:852c339f5e4c103390b123e0eaed…

青岛手机建站模板企业免费邮箱注册申请

#计算器开发需求##1、实现加减乘除及拓号优先级解析#2、用户输入 1 - 2 * ( (60-30 (-40/5) * (9-2*5/3 7 /3*99/4*2998 10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,#必须自己解析里面的(),,-,*,/符号和公式,运算后得出结果,结果必须…

营销网站特点seo建站推广

(1)打开控制面板,进入【控制面板\系统和安全\Windows Defender 防火墙】 (2)点击左侧菜单【高级设置】,进入防火墙设置页面 (3)根据需要选择【入站规则】或者【出站规则】&#xff…

如何设立网站php做直播网站

文章目录 一.信息收集1.网段探测2.端口扫描3.版本服务探测4.漏扫5.目录扫描 二.漏洞利用1.分析信息2..fuzz工具 三.getshell四.提权六.nmap提权 一.信息收集 1.网段探测 因为使用的是VMware,靶机的IP地址是192.168.9.84 ┌──(root㉿kali)-[~/kali/vulnhub] └─…

做电商网站注意什么网页设计零基础学习课程

安装elasticsearch、kibana、IK分词器、扩展IK词典 后面还会安装kibana,这个会提供可视化界面方面学习。 需要注意的是elasticsearch和kibana版本一定要一样!!! 否则就像这样 elasticsearch 1、创建网络 因为我们还需要部署k…

东营网站建设优化如何把自己网站推广出去

文章目录 一、抽象类和接口总结总结补充说明主要区别 二、抽象类2.1 抽象类概述与声明2.2 抽象方法2.3 抽象类与抽象方法的使用 三、接口3.1 接口概述概述特征声明示例 3.2 接口的实现和继承说明示例 3.3 显式接口成员实现说明注意示例 一、抽象类和接口总结 总结 抽象类和接…

中国建设银行网站下载安装创新的南昌网站设计

接上文 RabbitMQ-主题模式 1 第四种交换机类型 header:它是根据头部信息来决定的,在我们发送的消息中是可以携带一些头部信息的,类似与HTTP,我们可以根据这些头部信息来决定路由到哪一个消息队列中。 修改配置类内容 Configuration public…

做信息网站需要什么邢台网站建设厂家

我按照pyecharts的官网案例学习flask,其中有段flask前后端分离的示例。官方教程:https://pyecharts.org/#/zh-cn...我用前后端分离展示柱状图、饼图都没问题,但把pyecharts的图形函数换成地理图表,就展示不出来,请问是…

专业彩票网站开发 APP开发网站开发与设计结课论文

阿里妹导读:从“叉手礼”、“水盆羊汤”、“酒晕妆”这些唐朝人的生活细节,到精美的坊间造型、充满意境的诗词歌赋,《长安十二时辰》不仅以缜密剧情赢得赞誉,更还原了一个真实的大唐长安。在精良制作之上,技术人如何让…

网页设计流程要怎么写冯宗耀seo教程

2023年天津市公共租赁住房网上登记流程图 小编为大家整理了天津市公共租赁住房网上登记流程,从登记到填写信息。 想要体验的朋友请看一下。 申请天津公共租赁住房时拒绝申报家庭情况会怎样? 天津市住房保障家庭在享受住房保障期间,如在应申…