root/traduc/branches/bv747/manuel/ref/create_index.sgml

Revision 104, 10.2 kB (checked in by gleu, 3 years ago)

Des sauts de ligne en trop dans les exemples.

Line 
1 <!--
2 $Header: /var/lib/cvs/pgsql-fr/sgml/ref/create_index.sgml,v 1.7.2.1 2005/03/14 06:03:01 guillaume Exp $
3 PostgreSQL documentation
4 -->
5
6 <refentry id="SQL-CREATEINDEX">
7  <refmeta>
8   <refentrytitle id="sql-createindex-title">CREATE INDEX</refentrytitle>
9   <refmiscinfo>SQL - Instructions du langage</refmiscinfo>
10  </refmeta>
11
12  <refnamediv>
13   <refname>CREATE INDEX</refname>
14   <refpurpose>définit un nouvel index</refpurpose>
15  </refnamediv>
16
17  <indexterm zone="sql-createindex">
18   <primary>CREATE INDEX</primary>
19  </indexterm>
20
21  <refsynopsisdiv>
22 <synopsis>
23 CREATE [ UNIQUE ] INDEX <replaceable class="parameter">nom</replaceable> ON <replaceable class="parameter">table</replaceable> [ USING <replaceable
24 class="parameter">méthode</replaceable> ]
25     ( { <replaceable class="parameter">colonne</replaceable> | ( <replaceable
26 class="parameter">expression</replaceable> ) } [ <replaceable
27 class="parameter">classeop</replaceable> ] [, ...] )
28     [ WHERE <replaceable class="parameter">prédicat</replaceable> ]
29 </synopsis>
30  </refsynopsisdiv>
31
32  <refsect1>
33   <title>Description</title>
34
35   <para>
36    <command>CREATE INDEX</command> construit un index <replaceable
37    class="parameter">nom_index</replaceable> sur la table spécifiée. Les index
38    sont principalement utilisés pour améliorer les performances de la base de
39    données (bien qu'une utilisation inappropriée résultera en des performances
40    moindres).
41   </para>
42
43   <para>
44    Les champs clé pour l'index sont spécifiés par les noms des colonnes ou
45    comme des expressions écrites entre parenthèses. Plusieurs champs peuvent
46    être spécifiés si la méthode d'indexage supporte les index multi-colonnes.
47   </para>
48
49   <para>
50    Un champ index peut être une expression calculée à partir des valeurs d'une
51    ou plusieurs colonnes d'une ligne d'une table. Cette fonctionnalité peut être
52    utilisée pour obtenir un accès rapide aux données basées sur quelques
53    transformations des données basiques. Par exemple, un index calculé sur
54    <literal>upper(col)</> permettra l'utilisation d'un index par <literal>WHERE
55    upper(col) = 'JIM'</>.
56   </para>
57
58   <para>
59    <productname>PostgreSQL</productname> fournit les méthodes d'indexage
60    B-tree, R-tree, hash et GiST. La méthode d'indexage B-tree est une
61    implémentation des arbres balancées à haute concurrence de Lehman-Yao. La
62    méthode d'indexage R-tree implémente les R-tree en utilisant l'algorithme
63    divisé quadratique de Guttman. La méthode d'indexage hash est une
64    implémentation du découpage linaire de Litwin. Les utilisateurs peuvent aussi
65    définir leur propre méthode d'indexage mais ceci est particulièrement
66    compliqué.
67   </para>
68
69   <para>
70     Lorsque la clause <literal>WHERE</literal> est présente, un
71     <firstterm>index partiel</firstterm> est créé. Un index partiel est un index
72     contenant des entrées pour seulement une portion d'une table, habituellement
73     une portion qui est un peu plus intéressante que le reste de la table. Par
74     exemple, si vous disposez d'une table contenant des ordres facturés et non
75     facturés où les ordres non facturés prennent une petite fraction du total de
76     la table et qu'il s'agit en plus d'une section fréquemment utilisée, vous
77     pouvez améliorer les performances en créant un index sur cette portion. Une
78     autre application possible est d'utiliser <literal>WHERE</literal> avec
79     <literal>UNIQUE</literal> pour renforcer l'unicité sur un sous-ensemble
80     d'une table.
81   </para>
82
83   <para>
84     L'expression utilisée dans la clause <literal>WHERE</literal> pourrait
85     référencer seulement les colonnes de la table sous-jacente (mais il peut
86     utiliser toute les colonnes, pas seulement celles en cours d'indexage).
87     Actuellement, les sous-requêtes et les expressions d'agrégats sont aussi
88     interdites dans <literal>WHERE</literal>. Les mêmes restrictions
89     s'appliquent aux champs d'index qui sont des expressions.
90   </para>
91
92   <para>
93    Toutes les fonctions et opérateurs utilisés dans la définition d'index
94    doivent être <quote>immutable</>, c'est-à-dire que leur résultat doit
95    uniquement dépendre de leurs arguments et jamais d'une influence externe
96    (telle que le contenu d'une autre table ou l'heure actuelle). Cette
97    restriction permet de s'assurer que le comportement de l'index est bien
98    défini. Pour utiliser une fonction définie par l'utilisateur dans une
99    expression d'index ou dans une clause <literal>WHERE</literal>, rappelez-vous
100    de marquer la fonction comme immutable lorsque vous la créez.
101   </para>
102  </refsect1>
103
104  <refsect1>
105   <title>Paramètres</title>
106
107     <variablelist>
108      <varlistentry>
109       <term><literal>UNIQUE</literal></term>
110       <listitem>
111        <para>
112         Fait que le système vérifie les valeurs dupliquées dans la table à la
113         création de l'index (si des données existent déjà) et à chaque fois
114         qu'une donnée est ajoutée. Les tentatives d'insertion ou de mises à jour
115         qui résulteraient en des entrées dupliquées généreront une erreur.
116        </para>
117       </listitem>
118      </varlistentry>
119
120      <varlistentry>
121       <term><replaceable class="parameter">nom</replaceable></term>
122       <listitem>
123        <para>
124         Le nom de l'index à créer. Aucun nom de schéma ne peut être inclus
125         ici&nbsp;; l'index est toujours créé dans le même schéma que sa table
126         parent.
127        </para>
128       </listitem>
129      </varlistentry>
130
131      <varlistentry>
132       <term><replaceable class="parameter">table</replaceable></term>
133       <listitem>
134        <para>
135         Le nom de la table à indexer (pouvant être qualifié du nom du schéma).
136        </para>
137       </listitem>
138      </varlistentry>
139
140      <varlistentry>
141       <term><replaceable class="parameter">méthode</replaceable></term>
142       <listitem>
143        <para>
144         Le nom de la méthode à utiliser pour l'index. Les choix sont
145         <literal>btree</literal>, <literal>hash</literal>,
146         <literal>rtree</literal> et <literal>gist</literal>. La méthode par
147         défaut est <literal>btree</literal>.
148        </para>
149       </listitem>
150      </varlistentry>
151
152      <varlistentry>
153       <term><replaceable class="parameter">colonne</replaceable></term>
154       <listitem>
155        <para>
156         Le nom d'une colonne de la table.
157        </para>
158       </listitem>
159      </varlistentry>
160
161      <varlistentry>
162       <term><replaceable class="parameter">expression</replaceable></term>
163       <listitem>
164        <para>
165         Une expression basée sur une ou plusieurs colonnes de la table.
166         L'expression doit habituellement être écrite en l'entourant de
167         parenthèses, comme le montre la syntaxe. Néanmoins, les parenthèses
168         peuvent être oubliées si l'expression est de la forme d'un appel de
169         fonction.
170        </para>
171       </listitem>
172      </varlistentry>
173
174      <varlistentry>
175       <term><replaceable class="parameter">classeop</replaceable></term>
176       <listitem>
177        <para>
178         Le nom d'une classe d'opérateur. Voir ci-dessous pour les détails.
179        </para>
180       </listitem>
181      </varlistentry>
182
183      <varlistentry>
184       <term><replaceable class="parameter">prédicat</replaceable></term>
185       <listitem>
186        <para>
187         L'expression de contrainte pour un index partiel.
188        </para>
189       </listitem>
190      </varlistentry>
191     </variablelist>
192  </refsect1>
193
194  <refsect1>
195   <title>Notes</title>
196
197   <para>
198    Voir <xref linkend="indexes"> pour des informations sur le moment où les
199    index sont utilisés, quand ils ne le sont pas et dans quelles situations
200    particulières ils peuvent être utiles.
201   </para>
202
203   <para>
204    Actuellement, seules les méthodes d'indexage B-tree et GiST supportent les
205    index multi-colonnes. Jusqu'à 32 champs peuvent être spécifiés par défaut.
206    (Cette limite peut être modifiée lors de la construction de
207    <productname>PostgreSQL</productname>.) Seul B-tree supporte actuellement les
208    index uniques.
209   </para>
210
211   <para>
212    Une <firstterm>classe d'opérateur</firstterm> peut être spécifiée pour
213    chaque colonne d'un index. La classe d'opérateur identifie les opérateurs à
214    utiliser par l'index pour cette colonne. Par exemple, un index B-tree sur des
215    entiers sur quatre octets utiliserait la classe
216    <literal>int4_ops</literal>&nbsp;; cette classe d'opérateur inclut des
217    fonctions de comparaison pour les entiers sur quatre octets. En pratique, la
218    classe d'opérateur par défaut pour le type de données de la colonne est
219    généralement suffisant. Le point principal pour avoir des classes d'opérateur
220    est que pour certains types de données, il pourrait y avoir plus d'un
221    ordonnancement significatif. Par exemple, nous pourrions vouloir trier un
222    type de données <quote>nombre complexe</quote> soit par sa valeur absolue
223    soit par sa partie réelle. Nous pourrions le faire en définissant deux
224    classes d'opérateur pour le type de données, puis en sélectionnant la bonne
225    classe lors de la création d'un index. Plus d'informations sur les classes
226    d'opérateurs sont disponibles dans <xref linkend="indexes-opclass"> et dans
227    <xref linkend="xindex">.
228   </para>
229
230   <para>
231    Utilisez <xref linkend="sql-dropindex" endterm="sql-dropindex-title">
232    pour supprimer un index.
233   </para>
234  </refsect1>
235
236  <refsect1>
237   <title>Exemples</title>
238
239   <para>
240    Pour créer un index B-tree sur la colonne <literal>titre</literal> dans la
241    table <literal>films</literal>&nbsp;:
242 <programlisting>
243 CREATE UNIQUE INDEX title_idx ON films (title);
244 </programlisting>
245   </para>
246
247 <!--
248 <comment>
249 Is this example correct?
250 </comment>
251   <para>
252    To create a R-tree index on a point attribute so that we
253    can efficiently use box operators on the result of the
254    conversion function:
255   </para>
256   <programlisting>
257 CREATE INDEX pointloc
258     ON points USING RTREE (point2box(location) box_ops);
259 SELECT * FROM points
260     WHERE point2box(points.pointloc) = boxes.box;
261   </programlisting>
262 -->
263
264  </refsect1>
265  
266  <refsect1>
267   <title>Compatibilité</title>
268
269   <para>
270    <command>CREATE INDEX</command> est une extension du langage
271    <productname>PostgreSQL</productname>. Les index n'existent pas dans le
272    standard SQL.
273   </para>
274  </refsect1>
275 </refentry>
276
277 <!-- Keep this comment at the end of the file
278 Local variables:
279 mode: sgml
280 sgml-omittag:nil
281 sgml-shorttag:t
282 sgml-minimize-attributes:nil
283 sgml-always-quote-attributes:t
284 sgml-indent-step:1
285 sgml-indent-data:t
286 sgml-parent-document:nil
287 sgml-default-dtd-file:"../reference.ced"
288 sgml-exposed-tags:nil
289 sgml-local-catalogs:"/usr/lib/sgml/catalog"
290 sgml-local-ecat-files:nil
291 End:
292 -->
Note: See TracBrowser for help on using the browser.