Skip to content

Commit a78f8e9

Browse files
authored
Merge pull request #400 from sizhitu/master
翻译 14.1 sgml
2 parents cd0e8ca + 50303d2 commit a78f8e9

File tree

1 file changed

+58
-61
lines changed

1 file changed

+58
-61
lines changed

postgresql/doc/src/sgml/indices.sgml

Lines changed: 58 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ CREATE INDEX test1_id_index ON test1 (id);
118118
</para>
119119
____________________________________________________________________________-->
120120
<para>
121-
为了移除一个索引,可以使用<command>DROP INDEX</command>命令。索引可以随时被创建或删除。
121+
删除一个索引,使用<command>DROP INDEX</command>命令。索引可以随时被创建或删除。
122122
</para>
123123

124124
<!--==========================orignal english content==========================
@@ -148,7 +148,7 @@ ____________________________________________________________________________-->
148148
</para>
149149
____________________________________________________________________________-->
150150
<para>
151-
索引也会使带有搜索条件的<command>UPDATE</command>和<command>DELETE</command>命令受益。此外索引还可以在连接搜索中使用。因此,一个定义在连接条件列上的索引可以显著地提高连接查询的速度。
151+
索引也会对带有搜索条件的<command>UPDATE</command>和<command>DELETE</command>命令有帮助。此外索引还可以在连接搜索中使用。因此,一个定义在连接条件列上的索引可以显著地提高连接查询的速度。
152152
</para>
153153

154154
<!--==========================orignal english content==========================
@@ -193,15 +193,24 @@ ____________________________________________________________________________-->
193193
B-tree, Hash, GiST, SP-GiST, GIN and BRIN.
194194
Each index type uses a different
195195
algorithm that is best suited to different types of queries.
196-
By default, the <command>CREATE INDEX</command> command creates
196+
By default, the <link linkend="sql-createindex"><command>CREATE
197+
INDEX</command></link> command creates
197198
B-tree indexes, which fit the most common situations.
199+
The other index types are selected by writing the keyword
200+
<literal>USING</literal> followed by the index type name.
201+
For example, to create a Hash index:
198202
</para>
199203
____________________________________________________________________________-->
200204
<para>
201205
<productname>PostgreSQL</productname>提供了多种索引类型:
202206
B-tree、Hash、GiST、SP-GiST 、GIN 和 BRIN。每一种索引类型使用了
203207
一种不同的算法来适应不同类型的查询。默认情况下,
204-
<command>CREATE INDEX</command>命令创建适合于大部分情况的B-tree 索引。
208+
<link linkend="sql-createindex"><command>CREATE
209+
INDEX</command></link> 命令创建适合于大部分情况的B-tree 索引。
210+
在索引类型名后面加上关键字<literal>USING</literal> , 可以选择其他的索引类型,例如, 创建一个HASH索引:
211+
<programlisting>
212+
CREATE INDEX <replaceable>name</replaceable> ON <replaceable>table</replaceable> USING HASH (<replaceable>column</replaceable>);
213+
</programlisting>
205214
</para>
206215

207216
<!--==========================orignal english content==========================
@@ -234,24 +243,21 @@ ____________________________________________________________________________-->
234243
NULL</literal> condition on an index column can be used with a B-tree index.
235244
</para>
236245
____________________________________________________________________________-->
237-
<para>
246+
<sect2 id="indexes-types-btree">
247+
<title>B-Tree</title>
238248
<indexterm>
239249
<primary>index</primary>
240-
<secondary>B-tree</secondary>
250+
<secondary>B-Tree</secondary>
241251
</indexterm>
242252
<indexterm>
243-
<primary>B-tree</primary>
253+
<primary>B-Tree</primary>
244254
<see>index</see>
245255
</indexterm>
246256
B-tree可以在可排序数据上的处理等值和范围查询。特别地,<productname>PostgreSQL</productname>的查询规划器会在任何一种涉及到以下操作符的已索引列上考虑使用B-tree索引:
247257

248-
<simplelist>
249-
<member><literal>&lt;</literal></member>
250-
<member><literal>&lt;=</literal></member>
251-
<member><literal>=</literal></member>
252-
<member><literal>&gt;=</literal></member>
253-
<member><literal>&gt;</literal></member>
254-
</simplelist>
258+
<synopsis>
259+
&lt; &nbsp; &lt;= &nbsp; = &nbsp; &gt;= &nbsp; &gt;
260+
</synopsis>
255261

256262
将这些操作符组合起来,例如<literal>BETWEEN</literal>和<literal>IN</literal>,也可以用B-tree索引搜索实现。同样,在索引列上的<literal>IS NULL</literal>或<literal>IS NOT
257263
NULL</literal>条件也可以在B-tree索引中使用。
@@ -289,6 +295,7 @@ ____________________________________________________________________________-->
289295
<para>
290296
B-tree索引也可以用于检索排序数据。这并不会总是比简单扫描和排序更快,但是总是有用的。
291297
</para>
298+
</sect2>
292299

293300
<!--==========================orignal english content==========================
294301
<para>
@@ -310,7 +317,8 @@ CREATE INDEX <replaceable>name</replaceable> ON <replaceable>table</replaceable>
310317
</synopsis>
311318
</para>
312319
____________________________________________________________________________-->
313-
<para>
320+
<sect2 id="indexes-types-hash">
321+
<title>Hash</title>
314322
<indexterm>
315323
<primary>index</primary>
316324
<secondary>hash</secondary>
@@ -319,11 +327,12 @@ ____________________________________________________________________________-->
319327
<primary>hash</primary>
320328
<see>index</see>
321329
</indexterm>
322-
Hash索引只能处理简单等值比较。不论何时当一个索引列涉及到一个使用了<literal>=</literal>操作符的比较时,查询规划器将考虑使用一个Hash索引。下面的命令将创建一个Hash索引:
330+
HASH索引存储一个由索引列计算出的32位的hash code值。因此,Hash索引只能处理简单等值比较。每当索引列涉及到等值操作符的比较时,查询规划器将会使用Hash索引。
323331
<synopsis>
324-
CREATE INDEX <replaceable>name</replaceable> ON <replaceable>table</replaceable> USING HASH (<replaceable>column</replaceable>);
332+
=
325333
</synopsis>
326334
</para>
335+
</sect2>
327336

328337
<!--==========================orignal english content==========================
329338
<para>
@@ -368,7 +377,8 @@ CREATE INDEX <replaceable>name</replaceable> ON <replaceable>table</replaceable>
368377
projects. For more information see <xref linkend="gist"/>.
369378
</para>
370379
____________________________________________________________________________-->
371-
<para>
380+
<sect2 id="indexes-type-gist">
381+
<title>GiST</title>
372382
<indexterm>
373383
<primary>index</primary>
374384
<secondary>GiST</secondary>
@@ -377,22 +387,12 @@ ____________________________________________________________________________-->
377387
<primary>GiST</primary>
378388
<see>index</see>
379389
</indexterm>
390+
<para>
380391
GiST索引并不是一种单独的索引,而是可以用于实现很多不同索引策略的基础设施。相应地,可以使用一个GiST索引的特定操作符根据索引策略(<firstterm>操作符类</firstterm>)而变化。作为一个例子,<productname>PostgreSQL</productname>的标准捐献包中包括了用于多种二维几何数据类型的GiST操作符类,它用来支持使用下列操作符的索引化查询:
381392

382-
<simplelist>
383-
<member><literal>&lt;&lt;</literal></member>
384-
<member><literal>&amp;&lt;</literal></member>
385-
<member><literal>&amp;&gt;</literal></member>
386-
<member><literal>&gt;&gt;</literal></member>
387-
<member><literal>&lt;&lt;|</literal></member>
388-
<member><literal>&amp;&lt;|</literal></member>
389-
<member><literal>|&amp;&gt;</literal></member>
390-
<member><literal>|&gt;&gt;</literal></member>
391-
<member><literal>@&gt;</literal></member>
392-
<member><literal>&lt;@</literal></member>
393-
<member><literal>~=</literal></member>
394-
<member><literal>&amp;&amp;</literal></member>
395-
</simplelist>
393+
<synopsis>
394+
&lt;&lt; &nbsp; &amp;&lt; &nbsp; &amp;&gt; &nbsp; &gt;&gt; &nbsp; &lt;&lt;| &nbsp; &amp;&lt;| &nbsp; |&amp;&gt; &nbsp; |&gt;&gt; &nbsp; @&gt; &nbsp; &lt;@ &nbsp; ~= &nbsp; &amp;&amp;
395+
</synopsis>
396396

397397
(这些操作符的含义见<xref linkend="functions-geometry"/>)<xref linkend="gist-builtin-opclasses-table"/>中给出了标准发布中所包括的 GiST 操作符类。<literal>contrib</literal>集合中还包括了很多其他GiST操作符类,可见<xref linkend="gist"/>。
398398
</para>
@@ -420,6 +420,7 @@ SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;
420420
它将找到离给定目标点最近的10个位置。能够支持这种查询的能力同样取决于被使用的特定操作符类。
421421
在<xref linkend="gist-builtin-opclasses-table"/>中,<quote>Ordering Operators</quote>列中列出了可以在这种方法中使用的操作符。
422422
</para>
423+
</sect2>
423424

424425
<!--==========================orignal english content==========================
425426
<para>
@@ -455,7 +456,8 @@ SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;
455456
For more information see <xref linkend="spgist"/>.
456457
</para>
457458
____________________________________________________________________________-->
458-
<para>
459+
<sect2 id="indexes-type-spgist">
460+
<title>SP-GiST</title>
459461
<indexterm>
460462
<primary>index</primary>
461463
<secondary>SP-GiST</secondary>
@@ -464,17 +466,13 @@ ____________________________________________________________________________-->
464466
<primary>SP-GiST</primary>
465467
<see>index</see>
466468
</indexterm>
469+
<para>
467470
和GiST相似,SP-GiST索引为支持多种搜索提供了一种基础结构。SP-GiST 允许实现众多不同的非平衡的基于磁盘的数据结构,例如四叉树、k-d树和radix树。作为一个例
468471
子,<productname>PostgreSQL</productname>的标准捐献包中包含了一个用于二维点的SP-GiST操作符类,它用于支持使用下列操作符的索引化查询:
469472

470-
<simplelist>
471-
<member><literal>&lt;&lt;</literal></member>
472-
<member><literal>&gt;&gt;</literal></member>
473-
<member><literal>~=</literal></member>
474-
<member><literal>&lt;@</literal></member>
475-
<member><literal>&lt;^</literal></member>
476-
<member><literal>&gt;^</literal></member>
477-
</simplelist>
473+
<synopsis>
474+
&lt;&lt; &nbsp; &gt;&gt; &nbsp; ~= &nbsp; &lt;@ &nbsp; &lt;&lt;| &nbsp; |&gt;&gt;
475+
</synopsis>
478476

479477
(其含义见<xref linkend="functions-geometry"/>)<xref linkend="spgist-builtin-opclasses-table"/>中给出了标准发布中所包括的 SP-GiST 操作符类。更多信息参见<xref linkend="spgist"/>。
480478
</para>
@@ -489,8 +487,9 @@ ____________________________________________________________________________-->
489487
____________________________________________________________________________-->
490488
<para>
491489
就像 GiST, SP-GiST 支持 <quote>nearest-neighbor</quote> 搜索.
492-
对于支持距离排序的 SP-GiST 运算符类别,相应的运算符被规定在<xref linkend="spgist-builtin-opclasses-table"/>里面的<quote>Ordering Operators</quote>列中
490+
对于支持距离排序的 SP-GiST 运算符类别,相应的运算符被列在<xref linkend="spgist-builtin-opclasses-table"/>里面的<quote>Ordering Operators</quote>
493491
</para>
492+
</sect2>
494493

495494
<!--==========================orignal english content==========================
496495
<para>
@@ -509,7 +508,8 @@ ____________________________________________________________________________-->
509508
component values.
510509
</para>
511510
____________________________________________________________________________-->
512-
<para>
511+
<sect2 id="indexes-types-gin">
512+
<title>GIN</title>
513513
<indexterm>
514514
<primary>index</primary>
515515
<secondary>GIN</secondary>
@@ -518,6 +518,7 @@ ____________________________________________________________________________-->
518518
<primary>GIN</primary>
519519
<see>index</see>
520520
</indexterm>
521+
<para>
521522
GIN 索引是<quote>倒排索引</quote>,它适合于包含多个组成值的数据值,例如数组。倒排索引中为每一个组成值都包含一个单独的项,它可以高效地处理测试指定组成值是否存在的查询。
522523
</para>
523524

@@ -550,15 +551,13 @@ ____________________________________________________________________________-->
550551
<para>
551552
与 GiST 和 SP-GiST相似, GIN 可以支持多种不同的用户定义的索引策略,并且可以与一个 GIN 索引配合使用的特定操作符取决于索引策略。作为一个例子,<productname>PostgreSQL</productname>的标准贡献包中包含了用于数组的GIN操作符类,它用于支持使用下列操作符的索引化查询:
552553

553-
<simplelist>
554-
<member><literal>&lt;@</literal></member>
555-
<member><literal>@&gt;</literal></member>
556-
<member><literal>=</literal></member>
557-
<member><literal>&amp;&amp;</literal></member>
558-
</simplelist>
554+
<synopsis>
555+
&lt;@ &nbsp; @&gt; &nbsp; = &nbsp; &amp;&amp;
556+
</synopsis>
559557

560558
(这些操作符的含义见<xref linkend="functions-array"/>)<xref linkend="gin-builtin-opclasses-table"/>中给出了标准发布中所包括的 GIN 操作符类。在<literal>contrib</literal>集合中还有更多其他GIN操作符类,更多信息参见<xref linkend="gin"/>。
561559
</para>
560+
</sect2>
562561

563562
<!--==========================orignal english content==========================
564563
<para>
@@ -594,7 +593,8 @@ ____________________________________________________________________________-->
594593
For more information see <xref linkend="brin"/>.
595594
</para>
596595
____________________________________________________________________________-->
597-
<para>
596+
<sect2 id="indexes-types-brin">
597+
<title>BRIN</title>
598598
<indexterm>
599599
<primary>index</primary>
600600
<secondary>BRIN</secondary>
@@ -603,18 +603,15 @@ ____________________________________________________________________________-->
603603
<primary>BRIN</primary>
604604
<see>index</see>
605605
</indexterm>
606-
BRIN 索引(块范围索引的缩写)存储有关存放在一个表的连续物理块范围上的值摘要信息。与 GiST、SP-GiST 和 GIN 相似,BRIN 可以支持很多种不同的索引策略,并且可以与一个 BRIN 索引配合使用的特定操作符取决于索引策略。对于具有线性排序顺序的数据类型,被索引的数据对应于每个块范围的列中值的最小值和最大值,使用这些操作符来支持用到索引的查询:
606+
BRIN 索引(块范围索引的缩写)存储有关存放在一个表的连续物理块范围上的值摘要信息。因此,那些值和table中物理行存放顺序相关性更好的列更高效。与 GiST、SP-GiST 和 GIN 相似,BRIN 可以支持很多种不同的索引策略,并且可以与一个 BRIN 索引配合使用的特定操作符取决于索引策略。对于具有线性排序顺序的数据类型,被索引的数据对应于每个块范围的列中值的最小值和最大值,使用这些操作符来支持用到索引的查询:
607607

608-
<simplelist>
609-
<member><literal>&lt;</literal></member>
610-
<member><literal>&lt;=</literal></member>
611-
<member><literal>=</literal></member>
612-
<member><literal>&gt;=</literal></member>
613-
<member><literal>&gt;</literal></member>
614-
</simplelist>
608+
<synopsis>
609+
&lt; &nbsp; &lt;= &nbsp; = &nbsp; &gt;= &nbsp; &gt;
610+
</synopsis>
615611

616-
包括在标准发布中的 BRIN 操作符类的文档在<xref linkend="brin-builtin-opclasses-table"/>。更多信息请见<xref linkend="brin"/>。
612+
标准发行文档中有记录BRIN 操作符类<xref linkend="brin-builtin-opclasses-table"/>。更多信息请见<xref linkend="brin"/>。
617613
</para>
614+
</sect2>
618615
</sect1>
619616

620617

@@ -688,7 +685,7 @@ CREATE INDEX test2_mm_idx ON test2 (major, minor);
688685
</para>
689686
____________________________________________________________________________-->
690687
<para>
691-
目前,只有 B-tree、GiST、GIN 和 BRIN 索引类型支持多列索引,最多可以指定32个列(该限制可以在源代码文件<filename>pg_config_manual.h</filename>中修改,但是修改后需要重新编译<productname>PostgreSQL</productname>)。
688+
目前,只有 B-tree、GiST、GIN 和 BRIN 索引类型支持多列索引。是否可以有多个关键列与<literal>INCLUDE</literal>列是否可以被添加到索引中无关。 索引最多可以有32列,包括<literal>INCLUDE</literal>列。(该限制可以在源代码文件<filename>pg_config_manual.h</filename>中修改,但是修改后需要重新编译<productname>PostgreSQL</productname>)。
692689
</para>
693690

694691
<!--==========================orignal english content==========================
@@ -1970,7 +1967,7 @@ CREATE UNIQUE INDEX tab_x_y ON tab(x) INCLUDE (y);
19701967
</para>
19711968
____________________________________________________________________________-->
19721969
<para>
1973-
保守地将非键负载列添加到索引是明智的,尤其是宽列。 如果索引元组超过索引类型允许的最大大小,数据插入将失败。在任何情况下,非键列都将复制索引表中的数据并放大了索引的大小,从而有可能减慢搜索速度。请记住,除非一个表足够慢以至于仅索引扫描可能不必访问堆,否则没有什么理由在一个索引中包含负载列。无论如何,如果必须访问堆元组,从堆里获取列的值并不会带来更高的开销。其他限制是表达式不被作为包含的来支持。只有B树和GiST索引当前支持包含的列
1970+
保守地将非键负载列添加到索引是明智的,尤其是宽列。 如果索引元组超过索引类型允许的最大大小,数据插入将失败。在任何情况下,非键列都将复制索引表中的数据并放大了索引的大小,从而有可能减慢搜索速度。请记住,除非一个表足够慢以至于仅索引扫描可能不必访问堆,否则没有什么理由在一个索引中包含负载列。无论如何,如果必须访问堆元组,从堆里获取列的值并不会带来更高的开销。其他限制是表达式不被作为包含的来支持。只有B树,GiST和SP-GiST 索引当前支持包含的列
19741971
</para>
19751972

19761973
<!--==========================orignal english content==========================

0 commit comments

Comments
 (0)