{"title":"モデル index リファレンス","version":"5.0","locale":"ja","docname":"ref/models/indexes","url":"/ja/5.0/ref/models/indexes/","canonical":"https://djangodocs.dev/ja/5.0/ref/models/indexes/","summary":"Index クラスを利用すると、データベースのインデックスの作成が簡単になります。インデックスは、 Meta.indexes オプションを使用して追加できます。このドキュメントでは、 index options を含む Index の API リフェレンスを説明します。 ビルトインの indexes を参照する Indexes…","html":"<span id=\"model-index-reference\"></span><h1>モデル index リファレンス<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>Index クラスを利用すると、データベースのインデックスの作成が簡単になります。インデックスは、 <a class=\"reference internal\" href=\"/ja/5.0/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=\"#index-options\">index options</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 リフェレンスを説明します。</p>\n<aside class=\"admonition-referencing-built-in-indexes admonition\">\n<p class=\"admonition-title\">ビルトインの indexes を参照する</p>\n<p>Indexes は <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.models.indexes</span></code> で定義されていますが、簡単のため、<a class=\"reference internal\" href=\"/ja/5.0/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> を使用して、indexes を <code class=\"docutils literal notranslate\"><span class=\"pre\">models.&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-Tree) を作成します。</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>もう1つの例:</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><code class=\"docutils literal notranslate\"><span class=\"pre\">*expressions</span></code> を使用する場合、<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> は必須です。</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 はエラーにします。つまり、 <a class=\"reference internal\" href=\"/ja/5.0/ref/models/database-functions/#django.db.models.functions.Random\" title=\"django.db.models.functions.Random\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Random()</span></code></a> のような関数は受け付けられません。</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 はエラーを起こします。これは、<a class=\"reference internal\" href=\"/ja/5.0/ref/models/database-functions/#django.db.models.functions.Concat\" title=\"django.db.models.functions.Concat\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Concat()</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 &lt; 8.0.13 および 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<aside class=\"admonition-mariadb admonition\">\n<p class=\"admonition-title\">MariaDB</p>\n<p>インデックスの順序は MariaDB &lt; 10.8 ではサポートされていません。その場合は、降順のインデックスは普通のインデックスとして作成されます。</p>\n</aside>\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\">抽象基底クラス上の部分インデックス (partial index)</p>\n<p>インデックスには、常にユニークな名前を指定しなければなりません。したがって、(<code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> を含む) 属性に対して毎回完全に同じ値とともに <a class=\"reference internal\" href=\"/ja/5.0/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\">'%(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(fields=['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=\"/ja/5.0/topics/db/tablespaces/\"><span class=\"doc\">データベースの tablespace</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=\"/ja/5.0/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=\"/ja/5.0/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> オプションで指定されたtablespace 内に作成されます。もしどちらの tablespace も設定されていなかった場合には、インデックスはテーブルと同じ tablespace 内に作成されます。</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">参考</p>\n<p>PostgreSQL 特有のインデックスの一覧については、 <a class=\"reference internal\" href=\"/ja/5.0/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> の名前。カスタム演算子クラスが必要な場合、インデックス内の各フィールドごとに1つ指定する必要があります。</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><code class=\"docutils literal notranslate\"><span class=\"pre\">opclasses</span></code> を使用する場合、<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> が必要です。</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=\"/ja/5.0/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><code class=\"docutils literal notranslate\"><span class=\"pre\">condition</span></code> を使用する場合、<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> が必要です。</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=\"/ja/5.0/ref/models/database-functions/#date-functions\"><span class=\"std std-ref\">日時関連の関数</span></a> や <a class=\"reference internal\" href=\"/ja/5.0/ref/models/database-functions/#django.db.models.functions.Concat\" title=\"django.db.models.functions.Concat\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Concat</span></code></a> などの関数が受け入れられないことを意味します。日付を <a class=\"reference internal\" href=\"/ja/5.0/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 が <a class=\"reference internal\" href=\"/ja/5.0/ref/models/querysets/#field-lookups\"><span class=\"std std-ref\">lookups</span></a> に対して行うキャスティングの結果、比較がミュータブルな関数になる可能性があるためです。</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=\"/ja/5.0/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>) のみを select するクエリと、インデックスされたフィールド (<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> の select を可能にします。</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><code class=\"docutils literal notranslate\"><span class=\"pre\">include</span></code> を使用する場合、<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> は必須です。</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-restrictions-on-postgresql admonition\">\n<p class=\"admonition-title\">PostgreSQL の制限</p>\n<p>PostgreSQL は covering B-Tree および <a class=\"reference internal\" href=\"/ja/5.0/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\">GiST</span> <span class=\"pre\">インデックス</span></code></a> をサポートします。PostgreSQL 14+ は covering <a class=\"reference internal\" href=\"/ja/5.0/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\">SP-GiST</span> <span class=\"pre\">インデックス</span></code></a> もサポートします。</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":"/ja/5.0/ref/"},{"docname":"ref/models/index","title":"モデル","url":"/ja/5.0/ref/models/"}],"prev":{"docname":"ref/models/fields","title":"モデルフィールドリファレンス","url":"/ja/5.0/ref/models/fields/"},"next":{"docname":"ref/models/constraints","title":"制約 (Constraint) リファレンス","url":"/ja/5.0/ref/models/constraints/"},"formats":{"html":"/ja/5.0/ref/models/indexes/","markdown":"/ja/5.0/ref/models/indexes.md","json":"/ja/5.0/ref/models/indexes.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/ref/models/indexes.txt","official":"https://docs.djangoproject.com/ja/5.0/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","1.11"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}