首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

django 1.8 官方文档翻译: 2-6-4 数据库访问优化

理解查询集 理解查询集(QuerySets) 是通过简单的代码获取较好性能至关重要的一步。特别是: 理解查询集计算 要避免性能问题,理解以下几点非常重要: QuerySets是延迟的。...用唯一的被或索引的列来检索独立对象 有两个原因在get()中,用带有unique或者db_index的列检索独立对象。首先,由于查询经过了数据库的索引,所以会更快。...如果查询匹配到多于一个对象,它会在数据库中遍历和检索所有这些对象。如果记录中返回了成百上千个对象,代价是非常大的。如果数据库运行在分布式服务器上,网络开销和延迟也是一大因素,代价会是它们的组合。...一次性检索你需要的任何东西 在不同的位置多次访问数据库,一次获取一个数据集,通常来说不如在一次查询中获取它们更高效。如果你在一个循环中执行查询,这尤其重要。...但是: 不要过度使用 count() 和 exists() 如果你需要查询集中的其他数据,就把它加载出来。

1.1K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Django进阶-9-ORM分组与聚合查询

    : print(row.name) 这种查询方式第一次发送 查询请求每for循环一次也会发送查询请求 ② select_related() 结果为对象 注意query_set类型的对象...() 做连表操作依然会影响查询性能,所以出现prefetch_related; prefetch_related:不做连表,多次单表查询外键表 ,去重之后显示, 2次单表查询(有几个外键做几次1+N次单表查询...obj_list=models.Articles.objects.all().prefetch_related('category') for obj in obj_list:...print(obj.category.name) 二、ORM 分组和聚合查询 ① aggregate(*args,**kwargs) 聚合函数 通过对 QuerySet 进行计算,返回一个聚合值的字典...aggregate() 中每一个参数都指定一个包含在字典中的返回值。即在查询集上生成聚合。

    1K20

    【Django】Django ORM 学习笔记

    默认的 Manager 对象名称为 objects,下面是使用 Manager 进行增删改查的一个示例: def save_blog(): # 使用 get 检索数据时,如果数据不存在,会报...`name` = 'zjk' 限制 QuerySet 有时候我们并不需要获取查询集的全部数据,而只需要一个子集,一个常见的场景就是进行分页查询。...`id` = 1 迭代:在首次迭代查询集时会执行数据库查询 切片(限制查询集):对查询集执行切片操作时,指定 step 参数 序列化/缓存 repr:对查询集调用 repr 函数 len:对查询集调用...len 函数 list: 对查询集调用 list() 方法强制求值 bool:测试一个查询集的布尔值,例如使用bool(), or, and 或者 if 语句都将导致查询集的求值 缓存 每个 QuerySet...和 select_related 类似,prefetch_related 在查询时会同时取出关联实例的值。

    2.2K20

    提高Djang查询速度的9种方法

    目录索引的优化查询集的延迟加载使用select_related进行关联查询使用prefetch_related进行预取延迟计算字段使用values()和values_list()方法选择需要的字段使用annotate...查询集的延迟加载在Django中,查询集是惰性加载的,只有在需要数据时才会执行数据库查询。这意味着我们可以链式调用多个方法来对查询进行逐步优化,而不必立即执行查询。...使用prefetch_related进行预取在进行跨关联的查询时,使用prefetch_related()方法可以有效地减少数据库查询次数。...prefetch_related()方法会在查询时一次性将关联对象的数据一并查询出来,而不是每次访问关联对象时都执行一次查询。...使用values()和values_list()方法选择需要的字段默认情况下,查询集返回完整的模型对象。

    31520

    Django-model进阶(中介模型,查询优化,extra,整体插入)

    通常,查询集 的切片返回一个新的查询集 —— 它不会执行查询。...查询集 是惰性执行的 —— 创建查询集不会带来任何数据库的访问。...在一个新创建的查询集中,缓存为空。首次对查询集进行求值 —— 同时发生数据库查询 ——Django 将保存查询的结果到查询集的缓存中并返回明确请求的结果(例如,如果正在迭代查询集,则返回下一个结果)。...例如,重复获取查询集对象中一个特定的索引将每次都查询数据库: 1 2 3 >>> queryset = Entry.objects.all() >>> print queryset[5] # Queries...若有n个对象,每个对象的多对多字段对应Mi条,就会生成Σ(n)Mi 行的结果表。 prefetch_related()的解决方法是,分别查询每个表,然后用Python处理他们之间的关系。 ?

    1.6K70

    django select_related和prefetch_related的用法与区别

    今天我们再来学习两个非常重要的查询方法select_related和prefetch_related方法,看看如何使用它们避免不必要的数据库查询。高手过招,只差分毫。...当我们使用Article.objects.all()查询文章时,我们做了第一次数据库查询,查询的是blog_article数据表, 得到的数据只是文章对象列表,然而并没有包含与每篇文章相关联的category...prefetch_related使用方法如下: # 文章列表及每篇文章的tags对象名字信息 Article.objects.all().prefetch_related(‘tags__name’)...,请一定记住使用select_related和prefetch_related一次性获取所有对象信息,从而提升数据库查询效率,避免重复查询。...对与单对单或单对多外键ForeignKey字段,使用select_related方法 对于多对多字段和反向外键关系,使用prefetch_related方法 两种方法均支持双下划线指定需要查询的关联对象的字段名

    1.4K20

    如何在Django中使用单行查询来获取关联模型的数据

    这通常涉及使用查询集的 select_related 或 prefetch_related 方法,这两个方法允许你在一次数据库查询中获取关联模型的数据,而不是分开的多个查询。...2、解决方案Django 提供了多种方法来进行单行查询,其中最常见的方法是使用 select_related() 和 prefetch_related()。...2.2 使用 prefetch_related()prefetch_related() 可以将关联模型的数据预加载到内存中,这样就可以在后续的查询中直接使用预加载的数据,而不需要再进行数据库查询。...,但后续的查询可以直接使用预加载的数据,而不需要再进行数据库查询。...因此,如果我们知道后续会多次查询关联模型的数据,使用 prefetch_related() 可以提高效率。

    9110

    【愚公系列】2022年04月 Python教学课程 68-DRF框架之五个扩展类视图

    BooksMixinView(ListModelMixin, CreateModelMixin, GenericAPIView): """ 获取所有图书和保存图书 """ # 指定查询集属性...DestroyModelMixin, GenericAPIView): """ 获取单一图书数据 更新图书 删除图书 """ # 指定查询集属性...这允许更灵活的行为组合。.get().post() mixin 类可以从 中导入。rest_framework.mixins 1、ListModelMixin 提供一个方法,该方法实现列出查询集。....list(request, *args, **kwargs) 如果填充了查询集,这将返回一个响应,并将查询集的序列化表示形式作为响应的正文。可以选择对响应数据进行分页。...retrieve(request, *args, **kwargs) 如果可以检索对象,则返回响应,并将对象的序列化表示形式作为响应的主体。

    58420

    Django数据库查询优化与AJAX

    only only括号内放字段,查询结果是一个列表套一个个数据对象,这些数据对象点括号内的字段属性,不会再查数据库,直接就是对象获取属性;也支持点其他属性,但是其他属性会每拿一条数据就走一次数据库。...,然后将表中的数据一个一个查询出来封装成一个一个的对象。...prefetch_related内部是子查询(当一个查询是另一个查询的条件时,称之为子查询。)...,特点:按步骤查询多张表,然后将查询结果封装到对象中,给用户的感觉好像还是连表操作,括号内支持传多个外键字段,每放一个外键字段就会多走一条SQL语句,多查一张表。...AJAX的应用场景 搜索引擎根据用户输入的关键字,自动提示检索关键字,网站注册时候的实时用户名的查重,特点: 不刷新页面的前后端数据交互 异步操作,当请求发出后,浏览器还可以进行其他操作 AJAX前的知识储备

    2.4K20

    近邻搜索算法浅析

    ,进入其他候选节点的子空间查询距离更近的点 重复步骤2,直到搜索路径为空  性能 理想情况下的复杂度是O(K log(N)) 最坏的情况下(当查询点的邻域与分割超平面两侧的空间都产生交集时,回溯的次数大大增加...采用了BBF查询机制后Kd树便可以有效的扩展到高维数据集上 。...构建过程 : 随机选择两个点,执行k为2的聚类,用垂直于这两个聚类中心的超平面将数据集划分 在划分的子空间内进行递归迭代继续划分,直到每个子空间最多只剩下K个数据节点 最终形成一个二叉树结构。...查询耗时主要为: 计算q的hash值(table id)+ 计算q与table中点的距离 查询效果方面由于损失了大量原始信息从而降低检索精度 。...M个与待插元素连接 查询流程 从顶层到倒数第二层,循环执行操作:在当前层寻找距离查询节点最近的一个节点放入候选集中,从候选集中选取出距离查询节点最近的一个节作为下一层的入口点; 从上层得到的最近点开始搜索最底层

    3K104

    机器学习中的关键距离度量及其应用

    这种距离度量在计算平面上两点间的最短路径时非常有用。 余弦距离|Cosine Distance 余弦距离主要用于衡量文档或向量之间的相似性,尤其在自然语言处理和信息检索中。...根据维基百科的定义 马氏距离是点P和分布D之间距离的度量。测量的想法是,P距离D的平均值有多少个标准差。 使用马氏距离的好处是,它考虑了协方差,这有助于测量两个不同数据对象之间的强度/相似性。...自然语言处理-信息检索 在信息检索领域,我们经常处理的是未结构化的文本数据,如文章、网站、电子邮件、社交媒体帖子等。...,然后对查询文本进行同样的处理。...这表明这些文档中包含了查询词“brown”,而第四个文档则没有。 余弦相似度在信息检索中的应用非常广泛,特别是在搜索引擎、文本分类和情感分析等领域。

    16210

    解读向量索引

    在平面索引中,需要计算查询向量与索引中其他向量之间的相似度,然后返回具有最小相似性得分的K个向量。 当完美的精度是必要条件且速度不是主要考虑因素时,平面索引是一个合适的选择。...此外,如果我们正在处理的数据集较小,平面索引也可能是一个不错的选择,因为在这种情况下,搜索速度仍然是可接受的。...快速最近邻搜索:HNSW 能够迅速找到与给定查询点最相似的数据点,适用于推荐系统、基于内容的图像检索和自然语言处理等任务。...向量索引的选择 选择恰当的索引对于确保相似性检索的效率和准确性至关重要。向量索引的选择取决于多个因素,包括数据集的大小、嵌入的维数、搜索结果的期望精度以及可用的计算资源。...Malkov 和 Yashunin 的“有效近似最近邻搜索与接近图”深入讨论了 HNSW 算法,为其在大规模数据集中的应用提供了有价值的背景。 4.

    33810

    提升Django性能数据库优化与ORM调优技巧详解

    在开发基于Django的Web应用程序时,数据库是至关重要的组成部分之一。Django的ORM(对象关系映射)为开发者提供了便利,使得与数据库的交互变得简单且直观。...([MyModel(name='name1', age=20), MyModel(name='name2', age=25)]) 3. select_related和prefetch_related 在处理关联查询时...,使用select_related和prefetch_related可以减少数据库查询次数,提高性能。...优化查询集 在处理查询集时,尽量避免使用all()方法,而是根据实际需求选择只取需要的字段或者进行过滤操作,以减少数据传输和处理的开销。...使用延迟加载 对于一些不是必需立即加载的大字段或关联对象,可以使用延迟加载以提高初始加载速度。

    33720
    领券