{"title":"Référence des index de modèle","version":"5.2","locale":"fr","docname":"ref/models/indexes","url":"/fr/5.2/ref/models/indexes/","canonical":"https://djangodocs.dev/fr/5.2/ref/models/indexes/","summary":"Les classes d’index facilitent la création d’index de base de données. Elles peuvent être ajoutées avec l’option Meta.indexes . Ce document détaille les références…","html":"<span id=\"model-index-reference\"></span><h1>Référence des index de modèle<a class=\"heading-anchor\" href=\"#module-django.db.models.indexes\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Les classes d’index facilitent la création d’index de base de données. Elles peuvent être ajoutées avec l’option <a class=\"reference internal\" href=\"/fr/5.2/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>. Ce document détaille les références d’API de <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> ce qui inclut les <a class=\"reference internal\" href=\"#index-options\">options d’index</a>.</p>\n<aside class=\"admonition-referencing-built-in-indexes admonition\">\n<p class=\"admonition-title\">Référencement des index intégrés</p>\n<p>Les index sont définis dans <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.models.indexes</span></code>, mais par commodité ils sont importés dans <a class=\"reference internal\" href=\"/fr/5.2/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>. La convention standard est d’utiliser <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> et de se référer aux index avec <code class=\"docutils literal notranslate\"><span class=\"pre\">models.&lt;IndexClass&gt;</span></code>.</p>\n</aside>\n<section id=\"index-options\">\n<h2>Options d”<code class=\"docutils literal notranslate\"><span class=\"pre\">Index</span></code><a class=\"heading-anchor\" href=\"#index-options\"><span class=\"visually-hidden\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Crée un index (B-Tree) dans la base de données.</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\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>L’argument positionnel <code class=\"docutils literal notranslate\"><span class=\"pre\">*expressions</span></code> permet de créer des index fonctionnels sur des expressions et des fonctions de base de données.</p>\n<p>Par exemple :</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>crée un index sur la valeur en minuscules du champ <code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code> dans l’ordre alphabétique inverse et le champ <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code> dans l’ordre alphabétique par défaut.</p>\n<p>Un autre exemple :</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>crée un index sur le résultat de la multiplication des champs <code class=\"docutils literal notranslate\"><span class=\"pre\">height</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">weight</span></code> avec le champ <code class=\"docutils literal notranslate\"><span class=\"pre\">weight</span></code> arrondi à l’entier le plus proche.</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> est obligatoire quand on utilise <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\">Restrictions avec Oracle</p>\n<p>Oracle exige que les fonctions référencées dans un index soient marquées comme <code class=\"docutils literal notranslate\"><span class=\"pre\">DETERMINISTIC</span></code>. Django ne vérifie pas cela mais Oracle produit une erreur si ce n’est pas le cas. Cela signifie que les fonctions telles que <a class=\"reference internal\" href=\"/fr/5.2/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> ne sont pas admises.</p>\n</aside>\n<aside class=\"admonition-restrictions-on-postgresql admonition\">\n<p class=\"admonition-title\">Restrictions pour PostgreSQL</p>\n<p>PostgreSQL exige que les fonctions et les opérateurs référencés dans un index soient marquées comme <code class=\"docutils literal notranslate\"><span class=\"pre\">IMMUTABLE</span></code>. Django ne vérifie pas cela mais PostgreSQL produit une erreur si ce n’est pas le cas. Cela signifie que les fonctions telles que <a class=\"reference internal\" href=\"/fr/5.2/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> ne sont pas admises.</p>\n</aside>\n<aside class=\"admonition-mysql-and-mariadb admonition\">\n<p class=\"admonition-title\">MySQL et MariaDB</p>\n<p>Les index fonctionnels sont ignorés avec MySQL &lt; 8.0.13 et MariaDB car aucun des deux ne les prend en charge.</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\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Une liste ou un tuple de noms de champs sur lesquels l’index doit porter.</p>\n<p>Par défaut, les index sont créés avec un tri croissant sur chaque colonne. Pour définir un index avec un tri décroissant sur une certaine colonne, ajoutez un tiret devant le nom du champ.</p>\n<p>Par exemple, <code class=\"docutils literal notranslate\"><span class=\"pre\">Index(fields=['headline',</span> <span class=\"pre\">'-pub_date'])</span></code> créerait du SQL contenant <code class=\"docutils literal notranslate\"><span class=\"pre\">(headline,</span> <span class=\"pre\">pub_date</span> <span class=\"pre\">DESC)</span></code>.</p>\n<aside class=\"admonition-mariadb admonition\">\n<p class=\"admonition-title\">MariaDB</p>\n<p>L’ordonnancement des index n’est pas pris en charge par MariaDB &lt; 10.8. Dans ce cas, un index décroissant est créé comme un index normal.</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\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Le nom de l’index. Si <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> n’est pas fourni, Django va générer automatiquement un nom. Par compatibilité avec les différentes bases de données, les noms d’index ne peuvent pas être plus longs que 30 caractères et ne doivent pas commencer par un nombre (0-9) ni par un soulignement (_).</p>\n<aside class=\"admonition-partial-indexes-in-abstract-base-classes admonition\">\n<p class=\"admonition-title\">Index partiels dans les classes de base abstraites</p>\n<p>Un index doit toujours être nommé de façon unique. Cela signifie qu’il n’est pas possible de définir un index partiel dans une classe de base abstraite, dans la mesure où l’option <a class=\"reference internal\" href=\"/fr/5.2/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> est héritée par les sous-classes avec exactement les mêmes valeurs d’attributs (y compris <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>). Pour éviter des collisions de nom, le nom peut contenir <code class=\"docutils literal notranslate\"><span class=\"pre\">'%(app_label)s'``et</span> <span class=\"pre\">``'%(class)s'</span></code> qui seront remplacés respectivement par l’étiquette de l’application et le nom de la classe du modèle concret (tout en minuscules). Par exemple, <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\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Le nom de l’<a class=\"reference internal\" href=\"/fr/5.2/topics/db/tablespaces/\"><span class=\"doc\">espace de tables de base de données</span></a> à utiliser pour cet index. Pour les index sur un seul champ et si <code class=\"docutils literal notranslate\"><span class=\"pre\">db_tablespace</span></code> n’est pas indiqué, l’index est créé dans l’espace <code class=\"docutils literal notranslate\"><span class=\"pre\">db_tablespace</span></code> du champ.</p>\n<p>Si <a class=\"reference internal\" href=\"/fr/5.2/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> n’est pas présent (ou si l’index utilise plusieurs champs), l’index est créé dans l’espace de tables défini dans l’option <a class=\"reference internal\" href=\"/fr/5.2/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> dans la classe <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code> du modèle. Si aucun de ces espaces n’est défini, l’index est créé dans le même espace de tables que la table.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Voir aussi</p>\n<p>Pour une liste des index spécifiques à PostgreSQL, voir <a class=\"reference internal\" href=\"/fr/5.2/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\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Les noms des <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/indexes-opclass.html\">classes d’opérateurs PostgreSQL</a> à utiliser pour cet index. Si vous nécessitez une classe d’opérateur personnalisée, vous devez en fournir une pour chaque champ de l’index.</p>\n<p>Par exemple, <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> crée un index gin pour le champ <code class=\"docutils literal notranslate\"><span class=\"pre\">jsonfield</span></code> en utilisant les classes d’opérateurs <code class=\"docutils literal notranslate\"><span class=\"pre\">jsonb_path_ops</span></code>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">opclasses</span></code> est ignoré pour les bases de données autres que 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> est obligatoire quand on utilise <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\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Si la table est très grande et que vos requêtes ciblent principalement un certain sous-ensemble de lignes, il peut être utile de restreindre l’index à ce sous-ensemble. Indiquez une condition sous forme de <a class=\"reference internal\" href=\"/fr/5.2/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>. Par exemple, <code class=\"docutils literal notranslate\"><span class=\"pre\">condition=Q(pages__gt=400)</span></code> va indexer les lignes dont le champ <code class=\"docutils literal notranslate\"><span class=\"pre\">pages</span></code> est plus grand que 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> est obligatoire quand on utilise <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\">Restrictions pour PostgreSQL</p>\n<p>PostgreSQL exige que les fonctions référencées dans la condition soient marquées comme IMMUTABLE. Django ne le vérifie pas, mais PostgreSQL produira une erreur. Cela signifie que des fonctions telles que <a class=\"reference internal\" href=\"/fr/5.2/ref/models/database-functions/#date-functions\"><span class=\"std std-ref\">Fonctions de date</span></a> et <a class=\"reference internal\" href=\"/fr/5.2/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> ne sont pas admises. Si vous stockez des dates dans un champ <a class=\"reference internal\" href=\"/fr/5.2/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>, la comparaison avec des objets <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a> peut nécessiter la présence du paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">tzinfo</span></code> car sinon la comparaison pourrait aboutir à une fonction « mutable » en raison du forçage de type que Django effectue pour les <a class=\"reference internal\" href=\"/fr/5.2/ref/models/querysets/#field-lookups\"><span class=\"std std-ref\">expressions de requête</span></a>.</p>\n</aside>\n<aside class=\"admonition-restrictions-on-sqlite admonition\">\n<p class=\"admonition-title\">Restrictions pour SQLite</p>\n<p>SQLite <a class=\"reference external\" href=\"https://www.sqlite.org/partialindex.html\">impose des restrictions</a> sur la façon dont un index partiel peut être construit.</p>\n</aside>\n<aside class=\"admonition-oracle admonition\">\n<p class=\"admonition-title\">Oracle</p>\n<p>Oracle ne prend pas en charge les index partiels. Par contre, les index partiels peuvent être émulés à l’aide d’index fonctionnels en lien avec des expressions <a class=\"reference internal\" href=\"/fr/5.2/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 et MariaDB</p>\n<p>Le paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">condition</span></code> est ignoré avec MySQL et MariaDB, car aucune de ces bases de données ne prend en charge les index conditionnels.</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\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Une liste ou un tuple de noms de champs à inclure dans l’index couvrant, représentant des colonnes qui ne sont pas des clés. Cela permet des analyses en index pur avec des requêtes qui ne sélectionnent que les champs inclus (<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>) et qui ne filtrent que sur les champs indexés (<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>Par exemple :</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>permettra le filtrage sur <code class=\"docutils literal notranslate\"><span class=\"pre\">headline</span></code>, sélectionnant aussi <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code>, tout en ne récupérant les données qu’à partir de l’index.</p>\n<p>Avec <code class=\"docutils literal notranslate\"><span class=\"pre\">include</span></code>, l’index produit est plus petit qu’en utilisant un index sur plusieurs colonnes mais avec l’inconvénient que les colonnes n’étant pas des clés ne peuvent pas être utilisées pour le tri ou le filtrage.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">opclasses</span></code> est ignoré pour les bases de données autres que 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> est obligatoire quand on utilise <code class=\"docutils literal notranslate\"><span class=\"pre\">include</span></code>.</p>\n<p>Consultez la documentation PostgreSQL pour plus de détails au sujet des <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/indexes-index-only-scans.html\">index couvrants</a>.</p>\n<aside class=\"admonition-restrictions-on-postgresql admonition\">\n<p class=\"admonition-title\">Restrictions pour PostgreSQL</p>\n<p>PostgreSQL prend en charge les index couvrants de type B-Tree et <a class=\"reference internal\" href=\"/fr/5.2/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\">indexes</span></code></a>. PostgreSQL 14+ gère en plus les index couvrants de type <a class=\"reference internal\" href=\"/fr/5.2/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></code></a>.</p>\n</aside>\n</section>\n</section>","rootId":"module-django.db.models.indexes","toc":[{"title":"Options d”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":"Référence de l’API","url":"/fr/5.2/ref/"},{"docname":"ref/models/index","title":"Modèles","url":"/fr/5.2/ref/models/"}],"prev":{"docname":"ref/models/fields","title":"Référence des champs de modèle","url":"/fr/5.2/ref/models/fields/"},"next":{"docname":"ref/models/constraints","title":"Référence des contraintes","url":"/fr/5.2/ref/models/constraints/"},"formats":{"html":"/fr/5.2/ref/models/indexes/","markdown":"/fr/5.2/ref/models/indexes.md","json":"/fr/5.2/ref/models/indexes.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/ref/models/indexes.txt","official":"https://docs.djangoproject.com/fr/5.2/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","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}