|
71 | 71 | the generated constraint can be used in conjunction with a later column |
72 | 72 | constraint from the query predicate). |
73 | 73 | </span> |
74 | | -《マッチ度[52.363636]》複数列に対するB-treeインデックスをインデックス対象列の任意の部分集合を含む問い合わせ条件で使用することができます。 |
75 | | -しかし、先頭側の(左側)列に制約がある場合に、このインデックスはもっとも効率的になります。 |
76 | | -正確な規則は、先頭側の列への等価制約、および、等価制約を持たない先頭列への不等号制約がスキャン対象のインデックス範囲を制限するために使用されます。 |
77 | | -これらの列の右側の列に対する制約は、このインデックス内から検査されます。 |
78 | | -ですので、テーブルアクセスを適切に抑えますが、スキャンされるインデックスの範囲を減らしません。 |
79 | | -例えば、<code class="literal">(a, b, c)</code>に対するインデックスがあり、<code class="literal">WHERE a = 5 AND b >= 42 AND c < 77</code>という問い合わせ条件があったとすると、 |
80 | | -<code class="literal">a</code> = 5かつ<code class="literal">b</code> = 42を持つ項目を先頭に、<code class="literal">a</code> = 5となる最後の項目までのインデックスをスキャンしなければなりません。 |
81 | | -<code class="literal">c</code> >= 77を持つインデックス項目は飛ばされますが、スキャンを行わなければなりません。 |
82 | | -このインデックスは原理上、 <code class="literal">a</code>に対する制約を持たず、<code class="literal">b</code>あるいは<code class="literal">c</code>に制約に持つ問い合わせでも使用することができます。 |
83 | | -しかし、インデックス全体がスキャンされますので、ほとんどの場合、プランナはインデックスの使用よりもシーケンシャルテーブルスキャンを選択します。 |
84 | | -《機械翻訳》複数列B-ツリーインデックスは、問い合わせの列の任意のサブセットを含むインデックス条件で使用できますが、インデックスは先頭(左端)の列に制約がある場合に最も効率的です。 |
85 | | -正確なルールは、先頭の列に対する等式制約、つまり等式制約を持たない最初のカラムに対するプラスの不等式制約が、スキャンされるインデックスの部分を制限するために常に使用されるということです。 |
86 | | -これらの列の右側の列に対する制約はインデックスでチェックされるため、常にテーブルへの訪問を適切に保存しますが、スキャンする必要のあるインデックスの部分を必ずしも減らすとは限りません。 |
87 | | -B-ツリーインデックススキャンがスキップスキャン最適化を効果的に適用できる場合は、インデックス検索を繰り返してインデックスをナビゲートするときに、すべてのカラム制約を適用します。 |
88 | | -これにより、1つまたは複数の列(インデックスからの最下位のの前)に従来の等式がない場合でも、読み取られるインデックスの部分を減らすことができます。 |
89 | | -は、内部的に動的等式を生成することによって機能します。 |
90 | | -これは、内のすべての可能な値に一致します(ただし、に由来する等式を持たないが与えられた場合にのみ、生成されたが単位からの後の割引とともにで使用できる場合にのみ)。 |
91 | | -インデックスカラムスキップ制約問い合わせ述語制約問い合わせ制約問い合わせ制約スキャンカラム制約カラム論理積述語述語カラム |
| 74 | +複数列に対するB-treeインデックスは、インデックス対象列の任意の部分集合を含む問い合わせ条件で使用できますが、もっともインデックスの効率が良いのは、先頭(左側)の列に制約がある場合です。 |
| 75 | +正確な規則は、先頭の列に対する等価制約、および等価制約を持たない先頭の列に対する不等式制約は、常にスキャン対象のインデックス範囲を制限するために使用されるということです。 |
| 76 | +これらの列の右側の列に対する制約はインデックスで検査されるため、常にテーブルへのアクセスを適切に抑えますが、必ずしもスキャンしなければならないインデックスの範囲を減らすわけではありません。 |
| 77 | +B-treeインデックススキャンでスキップスキャン最適化を効果的に適用できる場合は、インデックス検索を繰り返してインデックスを辿るときに、すべての列制約が適用されます。 |
| 78 | +これにより、(問い合わせの述語に含まれるもっとも重要度の低いインデックス列より前に位置する)1つまたは複数の列に従来の等価制約がない場合でも、読まなければならないインデックスの範囲を減らすことができます。 |
| 79 | +スキップスキャンは、インデックス列において取り得るすべての値と一致する動的な等価制約を内部的に生成することで機能しています(ただし、問い合わせの述語に含まれる等価制約のない列に対してのみ適用され、かつ生成された制約が問い合わせの述語に含まれる後続の列制約と組み合わせて使用できる場合に限ります)。 |
92 | 80 | </p><p> |
93 | 81 | <span class="original"> |
94 | 82 | For example, given an index on <literal>(x, y)</literal>, and a query |
|
105 | 93 | then the entire index will have to be scanned, so in most cases the planner |
106 | 94 | will prefer a sequential table scan over using the index. |
107 | 95 | </span> |
108 | | -《機械翻訳》例では、インデックスon <code class="literal">(x, y)</code>、および問い合わせ条件<code class="literal">WHERE y = 7700</code>、B-ツリーインデックススキャンはスキップスキャン最適化を適用できる場合があります。 |
109 | | -これは一般に、問い合わせプランナが、テーブルで利用可能なインデックスが与えられた場合、反復<code class="literal">WHERE x = N AND y = 7700</code>可能性のあるすべての値<code class="literal">N</code>または実際にインデックスに格納されているすべて<code class="literal">x</code>の値の検索が可能な最速のアプローチであると想定している場合に発生します。 |
110 | | -このアプローチは一般に、明確な<code class="literal">x</code>値が非常に少ないため、プランナがインデックスの大部分に対してスキャンからスキップを想定している場合にのみ使用されます(リーフページの大部分には関連するタプルが含まれていない可能性があるため)。 |
111 | | -明確な<code class="literal">x</code>値が多数ある場合は、インデックス全体をスキャンする必要があるため、ほとんどの場合、プランナはインデックスよりシーケンシャルテーブルスキャンを優先します。 |
| 96 | +たとえば、<code class="literal">(x, y)</code>に対するインデックスと問い合わせ条件<code class="literal">WHERE y = 7700</code>では、B-treeインデックススキャンでスキップスキャン最適化を適用できる場合があります。 |
| 97 | +これは通常、問い合わせプランナがそのテーブルで使用可能なインデックスを考慮した時に、<code class="literal">WHERE x = N AND y = 7700</code>の検索を、<code class="literal">N</code>で取り得るすべての値(または実際にインデックスに格納されているすべての<code class="literal">x</code>の値)に対して繰り返す方法が最速であると想定している場合に発生します。 |
| 98 | +この方法は通常、<code class="literal">x</code>の個別値が非常に少なく、ほとんどのインデックスをスキップしてスキャンする(ほとんどのリーフページには関連するタプルが含まれないため)とプランナが期待する場合にのみ採用されます。 |
| 99 | +<code class="literal">x</code>の個別値が多い場合、インデックス全体のスキャンが必要になる状況になりうるため、ほとんどの場合プランナはインデックスを使用するよりもシーケンシャルスキャンを好みます。 |
112 | 100 | </p><p> |
113 | 101 | <span class="original"> |
114 | 102 | The skip scan optimization can also be applied selectively, during B-tree |
|
128 | 116 | index where the first tuple <literal>a = 5 AND b = N + 1</literal> |
129 | 117 | appears). |
130 | 118 | </span> |
131 | | -《機械翻訳》スキップスキャン最適化は、問い合わせツリーからの少なくともいくつかの有用な制約を有するB-述語スキャン中に選択的に適用することもできる。 |
132 | | -例の場合、インデックスon <code class="literal">(a, b, c)</code>および問い合わせ条件が指定されている場合、インデックスは<code class="literal">a</code>=5および<code class="literal">b</code>=42の最初のエントリから<code class="literal">a</code>=5の最後のエントリまでスキャンする必要がある場合があります。 |
133 | | -<code class="literal">c</code>>=77のインデックスエントリはテーブルレベルでフィルタする必要はありませんが、インデックス内でスキップに利益をもたらす場合とそうでない場合があります。 |
134 | | -スキップが行われると、スキャンは新しいインデックス検索を開始して、現在<code class="literal">a</code>=5および<code class="literal">b</code>=Nグループ化の末尾(つまり、最初のタプル<code class="literal">a = 5 AND b = N AND c >= 77</code>が表示されるインデックス内の位置)から、次のそのような(つまり、最初の<code class="literal">a = 5 AND b = N + 1</code>が表示される内の位置)に自分自身を再配置します。 |
135 | | -タプルグループ化スタートインデックス<code class="literal">WHERE a = 5 AND b >= 42 AND c < 77</code> |
| 119 | +スキップスキャンの最適化は、問い合わせの述語に有用な制約が少なくともいくつかあるB-treeスキャン中に、選択的に適用することもできます。 |
| 120 | +たとえば、<code class="literal">(a, b, c)</code>にインデックスがあり、<code class="literal">WHERE a = 5 AND b >= 42 AND c < 77</code>という問い合わせ条件がある場合、インデックスは<code class="literal">a</code> = 5および<code class="literal">b</code> = 42の最初のエントリから<code class="literal">a</code> = 5の最後のエントリまでスキャンする必要があるかもしれません。 |
| 121 | +<code class="literal">c</code> >= 77のインデックスエントリはテーブルレベルでフィルタリングする必要はありませんが、インデックス内でスキップすると効果がある場合とない場合があります。 |
| 122 | +スキップが行われると、スキャンは新しいインデックス検索を開始し、現在の<code class="literal">a</code> = 5と<code class="literal">b</code> = Nのグループの末尾(つまり、<code class="literal">a = 5 AND b = N AND c >= 77</code>の最初のタプルが現れるインデックスの位置)から、次のグルーピングの開始位置(つまり、<code class="literal">a = 5 AND b = N + 1</code>の最初のタプルが現れるインデックスの位置)まで位置を変更します。 |
136 | 123 | </p><p> |
137 | 124 | <span class="original"> |
138 | 125 | A multicolumn GiST index can be used with query conditions that |
|
0 commit comments