【问题标题】:Does Django do index optimization for basic queries (with Postgres)?Django 是否对基本查询(使用 Postgres)进行索引优化?
【发布时间】:2014-11-05 18:30:42
【问题描述】:

我想知道 django 是否正在优化以下查询。我有一个地址模型,它在用户字段上被索引,但不在 zip_code 字段上。

当我这样做时:

Address.objects.get(user=user, zip_code=zip_code)

希望发生的事情是查询首先利用索引返回与用户关联的地址,然后遍历该用户的地址列表并匹配具有给定的邮政编码。

但是,我担心此查询不会利用我已为用户编制索引的用户模型这一事实,而是会遍历所有地址以确保用户和 zip_code 匹配。

【问题讨论】:

  • 它不是 Djanog 但下划线 DB 将使用索引

标签: sql django postgresql


【解决方案1】:

这个问题与 Django 无关。 Django 不是数据库,也不以任何方式负责索引优化。 Django 只是将查询转换为 SQL 并将其传递给真正的数据库。可能 Postgres 做了您所描述的事情:要找出答案,您可以使用 Django 调试工具栏在特定查询上运行 EXPLAIN,并查看使用了哪些索引。但是,如果这是一个您会做很多事情的查询,您可能还是想在 user_id 和 zip_code 上创建一个组合索引。

【讨论】:

  • 这个问题怎么和Django没有关系呢?我本质上是在问 Django 是否正确翻译了这个。我没有看到创建组合索引的意义,因为无论如何用户应该只有 1-10 个地址。
  • 丹尼尔是正确的。 Django 只是根据模型中的字段和您指定的过滤器构建 SQL 语句。 Postgres(以及一般的数据库)具有称为“查询优化器”的复杂事物,它采用该查询字符串并试图找出检索结果的最快方法。这就是关键...... Postgresql(和任何其他数据库)可能会决定顺序表扫描是最好的,而不是使用您精心设计和巧妙的索引。而且查询优化器几乎总是正确的。
猜你喜欢
  • 2016-08-25
  • 2019-07-21
  • 2013-01-11
  • 2023-03-19
  • 2021-11-04
  • 2019-09-12
  • 2017-07-29
  • 2012-01-27
  • 1970-01-01
相关资源
最近更新 更多