{"title":"模型索引参考","version":"6.1","locale":"zh-hans","docname":"ref/models/indexes","url":"/zh-hans/6.1/ref/models/indexes/","canonical":"https://djangodocs.dev/zh-hans/6.1/ref/models/indexes/","summary":"索引类便于创建数据库索引。它们可以使用 Meta.indexes 选项来添加。本文档解释了 Index 的 API 引用，其中包括 index options 。 引用内置索引 索引是在 django.db.models.indexes 中定义的，但为了方便，它们被导入到 django.db.models 中。标准的惯例是使用…","html":"<span id=\"model-index-reference\"></span><h1>模型索引参考<a class=\"heading-anchor\" href=\"#module-django.db.models.indexes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>索引类便于创建数据库索引。它们可以使用 <a class=\"reference internal\" href=\"/zh-hans/6.1/ref/models/options/#django.db.models.Options.indexes\" title=\"django.db.models.Options.indexes\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Meta.indexes</span></code></a> 选项来添加。本文档解释了 <a class=\"reference internal\" href=\"#django.db.models.Index\" title=\"django.db.models.Index\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Index</span></code></a> 的 API 引用，其中包括 <a class=\"reference internal\" href=\"#index-options\">index options</a> 。</p>\n<aside class=\"admonition-referencing-built-in-indexes admonition\">\n<p class=\"admonition-title\">引用内置索引</p>\n<p>索引是在 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.models.indexes</span></code> 中定义的，但为了方便，它们被导入到 <a class=\"reference internal\" href=\"/zh-hans/6.1/topics/db/models/#module-django.db.models\" title=\"django.db.models\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.db.models</span></code></a> 中。标准的惯例是使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">from</span> <span class=\"pre\">django.db</span> <span class=\"pre\">import</span> <span class=\"pre\">models</span></code> 并将索引称为 <code class=\"docutils literal notranslate\"><span class=\"pre\">models.</span> <span class=\"pre\">&lt;IndexClass&gt;</span></code>。</p>\n</aside>\n<section id=\"index-options\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">Index</span></code> 选项<a class=\"heading-anchor\" href=\"#index-options\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Index\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Index</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">expressions</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">fields</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">()</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">db_tablespace</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">opclasses</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">()</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">condition</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">include</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Index\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>在数据库中创建一个索引（B 树）。</p>\n</dd></dl>\n\n<section id=\"expressions\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">expressions</span></code><a class=\"heading-anchor\" href=\"#expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Index.expressions\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Index.</span></span><span class=\"sig-name descname\"><span class=\"pre\">expressions</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Index.expressions\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>位置参数 <code class=\"docutils literal notranslate\"><span class=\"pre\">*expressions</span></code> 允许在表达式和数据库函数上创建函数索引。</p>\n<p>例子：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Index</span><span class=\"p\">(</span><span class=\"n\">Lower</span><span class=\"p\">(</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">desc</span><span class=\"p\">(),</span> <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;lower_title_date_idx&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>在 <code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code> 字段的小写字母上按降序创建索引，在 <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code> 字段上按默认升序创建索引。</p>\n<p>另一个例子：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Index</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;height&quot;</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;weight&quot;</span><span class=\"p\">),</span> <span class=\"n\">Round</span><span class=\"p\">(</span><span class=\"s2\">&quot;weight&quot;</span><span class=\"p\">),</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;calc_idx&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>在字段 <code class=\"docutils literal notranslate\"><span class=\"pre\">height</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">weight</span></code> 相乘的结果上创建一个索引，<code class=\"docutils literal notranslate\"><span class=\"pre\">weight</span></code> 四舍五入为最接近的整数。</p>\n<p><a class=\"reference internal\" href=\"#django.db.models.Index.name\" title=\"django.db.models.Index.name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Index.name</span></code></a> 在使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">*expressions</span></code> 时是必需的。</p>\n<aside class=\"admonition-restrictions-on-oracle admonition\">\n<p class=\"admonition-title\">Oracle 的限制</p>\n<p>Oracle 要求索引中引用的函数被标记为 <code class=\"docutils literal notranslate\"><span class=\"pre\">DETERMINISTIC</span></code>。Django 并不验证这一点，但 Oracle 会出错。这意味着诸如 <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Random()</span></code> 这样的函数不被接受。</p>\n</aside>\n<aside class=\"admonition-restrictions-on-postgresql admonition\">\n<p class=\"admonition-title\">PostgreSQL 的限制</p>\n<p>PostgreSQL 要求在索引中引用的函数和运算符被标记为 <code class=\"docutils literal notranslate\"><span class=\"pre\">IMMUTABLE</span></code>。Django 并不验证这一点，但 PostgreSQL 会出错。这意味着诸如 <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Concat()</span></code> 这样的函数不被接受。</p>\n</aside>\n<aside class=\"admonition-mariadb admonition\">\n<p class=\"admonition-title\">MariaDB</p>\n<p>Functional indexes are unsupported and ignored with MariaDB.</p>\n</aside>\n</section>\n<section id=\"fields\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></code><a class=\"heading-anchor\" href=\"#fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Index.fields\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Index.</span></span><span class=\"sig-name descname\"><span class=\"pre\">fields</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Index.fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>需要索引字段的名称列表或元组。</p>\n<p>默认情况下，索引是以每列的升序创建的。要为列定义一个降序索引，请在字段名前添加一个连字符。</p>\n<p>例如，<code class=\"docutils literal notranslate\"><span class=\"pre\">Index(fields=['headline',</span> <span class=\"pre\">'-pub_date'])</span></code> 将创建具有 <code class=\"docutils literal notranslate\"><span class=\"pre\">(headline,</span> <span class=\"pre\">pub_date</span> <span class=\"pre\">DESC)</span></code> 的 SQL。</p>\n</section>\n<section id=\"name\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code><a class=\"heading-anchor\" href=\"#name\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Index.name\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Index.</span></span><span class=\"sig-name descname\"><span class=\"pre\">name</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Index.name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>索引的名称。如果没有提供 <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>，Django 会自动生成一个名称。为了兼容不同的数据库，索引名不能超过 30 个字符，并且不应该以数字（0-9）或下划线（_）开头。</p>\n<aside class=\"admonition-partial-indexes-in-abstract-base-classes admonition\">\n<p class=\"admonition-title\">抽象基类中的部分索引</p>\n<p>你必须始终为索引指定一个唯一的名称。因此，通常不能在抽象基类上指定部分索引，因为 <a class=\"reference internal\" href=\"/zh-hans/6.1/ref/models/options/#django.db.models.Options.indexes\" title=\"django.db.models.Options.indexes\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Meta.indexes</span></code></a> 选项是由子类继承的，每次的属性值（包括 <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> ）都完全相同。为了解决名称碰撞的问题，名称的一部分可以包含 <code class=\"docutils literal notranslate\"><span class=\"pre\">'%(app_label)s'</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">'%(class)s'</span></code>，它们分别被具体模型的小写应用标签和类名所代替。例如 <code class=\"docutils literal notranslate\"><span class=\"pre\">Index(field=['title'],</span> <span class=\"pre\">name='%(app_label)s_%(class)s_title_index')</span></code>。</p>\n</aside>\n</section>\n<section id=\"db-tablespace\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">db_tablespace</span></code><a class=\"heading-anchor\" href=\"#db-tablespace\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Index.db_tablespace\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Index.</span></span><span class=\"sig-name descname\"><span class=\"pre\">db_tablespace</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Index.db_tablespace\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>该索引要使用的 <a class=\"reference internal\" href=\"/zh-hans/6.1/topics/db/tablespaces/\"><span class=\"doc\">数据库表空间</span></a> 名称。对于单字段索引，如果没有提供 <code class=\"docutils literal notranslate\"><span class=\"pre\">db_tablespace</span></code>，则在字段的 <code class=\"docutils literal notranslate\"><span class=\"pre\">db_tablespace</span></code> 中创建索引。</p>\n<p>如果没有指定 <a class=\"reference internal\" href=\"/zh-hans/6.1/ref/models/fields/#django.db.models.Field.db_tablespace\" title=\"django.db.models.Field.db_tablespace\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Field.db_tablespace</span></code></a> （或者如果索引使用了多个字段），则在模型的 <code class=\"docutils literal notranslate\"><span class=\"pre\">class</span> <span class=\"pre\">Meta</span></code> 里面的 <a class=\"reference internal\" href=\"/zh-hans/6.1/ref/models/options/#django.db.models.Options.db_tablespace\" title=\"django.db.models.Options.db_tablespace\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">db_tablespace</span></code></a> 选项中指定的表空间创建索引。如果这两个表空间都没有设置，则在与表相同的表空间中创建索引。</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">See also</p>\n<p>关于 PostgreSQL 特有的索引列表，请参见 <a class=\"reference internal\" href=\"/zh-hans/6.1/ref/contrib/postgres/indexes/#module-django.contrib.postgres.indexes\" title=\"django.contrib.postgres.indexes\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.postgres.indexes</span></code></a>。</p>\n</aside>\n</section>\n<section id=\"opclasses\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">opclasses</span></code><a class=\"heading-anchor\" href=\"#opclasses\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Index.opclasses\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Index.</span></span><span class=\"sig-name descname\"><span class=\"pre\">opclasses</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Index.opclasses\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>要为这个索引使用的 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/indexes-opclass.html\">PostgreSQL 运算符类</a> 名称。如果你需要一个自定义的操作类，你必须为索引中的每个字段提供一个操作类。</p>\n<p>例如，<code class=\"docutils literal notranslate\"><span class=\"pre\">GinIndex(name='json_index',</span> <span class=\"pre\">fields=['jsonfield'],</span> <span class=\"pre\">opclasses=['jsonb_path_ops'])</span></code> 使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">jsonb_path_ops</span></code> 在 <code class=\"docutils literal notranslate\"><span class=\"pre\">jsonfield</span></code> 上创建一个 gin 索引。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">opclasses</span></code> 对于 PostgreSQL 以外的数据库来说是被忽略的。</p>\n<p><a class=\"reference internal\" href=\"#django.db.models.Index.name\" title=\"django.db.models.Index.name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Index.name</span></code></a> 在使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">opclasses</span></code> 时需要。</p>\n</section>\n<section id=\"condition\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">condition</span></code><a class=\"heading-anchor\" href=\"#condition\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Index.condition\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Index.</span></span><span class=\"sig-name descname\"><span class=\"pre\">condition</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Index.condition\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>如果表非常大，而且你的查询主要针对行的子集，那么将索引限制在该子集上可能会很有用。将条件指定为 <a class=\"reference internal\" href=\"/zh-hans/6.1/ref/models/querysets/#django.db.models.Q\" title=\"django.db.models.Q\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Q</span></code></a>。例如，<code class=\"docutils literal notranslate\"><span class=\"pre\">condition=Q(pages__gt=400)</span></code> 对超过 400 页的记录进行索引。</p>\n<p><a class=\"reference internal\" href=\"#django.db.models.Index.name\" title=\"django.db.models.Index.name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Index.name</span></code></a> 在使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">condition</span></code> 时需要。</p>\n<aside class=\"admonition-restrictions-on-postgresql admonition\">\n<p class=\"admonition-title\">PostgreSQL 的限制</p>\n<p>PostgreSQL 要求条件中引用的函数必须标记为 IMMUTABLE。Django 不会验证这一点，但 PostgreSQL 会报错。这意味着诸如 <a class=\"reference internal\" href=\"/zh-hans/6.1/ref/models/database-functions/#date-functions\"><span class=\"std std-ref\">日期函数</span></a> 和 <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Concat</span></code> 这样的函数不被接受。如果你把日期存储在 <a class=\"reference internal\" href=\"/zh-hans/6.1/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code></a> 中，与 <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a> 对象进行比较时，可能需要提供 <code class=\"docutils literal notranslate\"><span class=\"pre\">tzinfo</span></code> 参数，否则比较的结果可能是一个可变的函数，因为 Django 对 <span class=\"xref std std-ref\">lookups</span> 进行了转换。</p>\n</aside>\n<aside class=\"admonition-restrictions-on-sqlite admonition\">\n<p class=\"admonition-title\">SQLite 的限制</p>\n<p>SQLite 对如何构建部分索引 <a class=\"reference external\" href=\"https://www.sqlite.org/partialindex.html\">施加了限制</a> 。</p>\n</aside>\n<aside class=\"admonition-oracle admonition\">\n<p class=\"admonition-title\">Oracle</p>\n<p>Oracle 不支持部分索引。相反，部分索引可以通过使用函数索引和 <a class=\"reference internal\" href=\"/zh-hans/6.1/ref/models/conditional-expressions/#django.db.models.expressions.Case\" title=\"django.db.models.expressions.Case\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Case</span></code></a> 表达式来进行模拟。</p>\n</aside>\n<aside class=\"admonition-mysql-and-mariadb admonition\">\n<p class=\"admonition-title\">MySQL 和 MariaDB</p>\n<p>在 MySQL 和 MariaDB 中，<code class=\"docutils literal notranslate\"><span class=\"pre\">condition</span></code> 参数被忽略，因为它们都不支持条件索引。</p>\n</aside>\n</section>\n<section id=\"include\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">include</span></code><a class=\"heading-anchor\" href=\"#include\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Index.include\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Index.</span></span><span class=\"sig-name descname\"><span class=\"pre\">include</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Index.include\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>一个包含在覆盖索引中作为非键列的字段名称的列表或元组。这允许仅索引扫描，用于只选择包含的字段（ <a class=\"reference internal\" href=\"#django.db.models.Index.include\" title=\"django.db.models.Index.include\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">include</span></code></a> ）和只通过索引字段过滤的查询（ <a class=\"reference internal\" href=\"#django.db.models.Index.fields\" title=\"django.db.models.Index.fields\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">fields</span></code></a>）。</p>\n<p>例子：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Index</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;covering_index&quot;</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">],</span> <span class=\"n\">include</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">])</span>\n</code></pre></div>\n<p>将允许对  <code class=\"docutils literal notranslate\"><span class=\"pre\">headline</span></code> 进行过滤，同时选择 <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code>，而只从索引中获取数据。</p>\n<p>使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">include</span></code> 将产生一个比使用多列索引更小的索引，但缺点是不能使用非键列进行排序或过滤。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">include</span></code> 对于 PostgreSQL 以外的数据库来说是被忽略的。</p>\n<p><a class=\"reference internal\" href=\"#django.db.models.Index.name\" title=\"django.db.models.Index.name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Index.name</span></code></a> 在使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">include</span></code> 时是必需的。</p>\n<p>关于 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/indexes-index-only-scans.html\">covering indexes</a> 的更多细节，请参阅 PostgreSQL 文档。</p>\n<aside class=\"admonition-postgresql-specific-indexes admonition\">\n<p class=\"admonition-title\">PostgreSQL-specific indexes</p>\n<p>In addition to B-Tree indexes (via <a class=\"reference internal\" href=\"#django.db.models.Index\" title=\"django.db.models.Index\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Index</span></code></a>), PostgreSQL also\nsupports <a class=\"reference internal\" href=\"/zh-hans/6.1/ref/contrib/postgres/indexes/#django.contrib.postgres.indexes.GistIndex\" title=\"django.contrib.postgres.indexes.GistIndex\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">GistIndex</span></code></a> and\n<a class=\"reference internal\" href=\"/zh-hans/6.1/ref/contrib/postgres/indexes/#django.contrib.postgres.indexes.SpGistIndex\" title=\"django.contrib.postgres.indexes.SpGistIndex\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SpGistIndex</span></code></a> indexes.</p>\n</aside>\n</section>\n</section>","rootId":"module-django.db.models.indexes","toc":[{"title":"Index 选项","anchor":"index-options","children":[{"title":"expressions","anchor":"expressions","children":[]},{"title":"fields","anchor":"fields","children":[]},{"title":"name","anchor":"name","children":[]},{"title":"db_tablespace","anchor":"db-tablespace","children":[]},{"title":"opclasses","anchor":"opclasses","children":[]},{"title":"condition","anchor":"condition","children":[]},{"title":"include","anchor":"include","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/6.1/ref/"},{"docname":"ref/models/index","title":"模型","url":"/zh-hans/6.1/ref/models/"}],"prev":{"docname":"ref/models/fields","title":"模型字段参考","url":"/zh-hans/6.1/ref/models/fields/"},"next":{"docname":"ref/models/constraints","title":"约束参考","url":"/zh-hans/6.1/ref/models/constraints/"},"formats":{"html":"/zh-hans/6.1/ref/models/indexes/","markdown":"/zh-hans/6.1/ref/models/indexes.md","json":"/zh-hans/6.1/ref/models/indexes.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/ref/models/indexes.txt","official":"https://docs.djangoproject.com/zh-hans/6.1/ref/models/indexes/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}