Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update planstats.sgml for v17 #3189

Merged
merged 5 commits into from
Jan 9, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 10 additions & 18 deletions doc/src/sgml/planstats.sgml
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,7 @@
while producing statistics, the results will change slightly after
any new <command>ANALYZE</command>.
-->
《マッチ度[55.755396]》以下の例は<productname>PostgreSQL</productname>リグレッションテストデータベース内のテーブルを使用します。
表示される出力はバージョン8.3で取得しました。
以前の(または以降の)バージョンとは動作が変わっているかもしれません。
また、<command>ANALYZE</command>は統計情報を生成する時にランダムなサンプリングを行いますので、結果は<command>ANALYZE</command>を新しく行った後に多少変わることに注意してください。
《機械翻訳》以下の例は<productname>PostgreSQL</productname>リグレッションテストデータベースのテーブルを使用しています。
以下の例は<productname>PostgreSQL</productname>リグレッションテストデータベースのテーブルを使用しています。
また、<command>ANALYZE</command>は統計を生成する際にランダムサンプリングを使用するため、新しい<command>ANALYZE</command>を実行した後は結果がわずかに変化することに注意してください。
</para>

Expand All @@ -82,7 +78,7 @@ EXPLAIN SELECT * FROM tenk1;
completeness. The number of pages and rows is looked up in
<structname>pg_class</structname>:
-->
プランナがどのように<structname>tenk1</structname>の濃度を決定するかについては<xref linkend="planner-stats"/>で説明しました。
プランナがどのように<structname>tenk1</structname>のカーディナリティを決定するかについては<xref linkend="planner-stats"/>で説明しました。
しかし、ここでは完全を期するために説明を繰り返します。
ページ数および行数は<structname>pg_class</structname>から検索されます。

Expand Down Expand Up @@ -185,7 +181,7 @@ selectivity = (1 + (1000 - bucket[2].min)/(bucket[2].max - bucket[2].min))/num_b
<structname>tenk1</structname>:
-->
つまり、1つのバケット全体に、2番目のバケットとの線形比率を加えたものを、バケット数で割ったものとなります。
ここで、行の推定値は、選択度と<structname>tenk1</structname>の濃度を掛け合わせたものとして計算されます
ここで、行の推定値は、選択度と<structname>tenk1</structname>のカーディナリティを掛け合わせたものとして計算されます

<programlisting>
rows = rel_cardinality * selectivity
Expand Down Expand Up @@ -255,7 +251,7 @@ selectivity = mcf[3]
As before, the estimated number of rows is just the product of this with the
cardinality of <structname>tenk1</structname>:
-->
前と同様、推定される行数は単に前回同様、この値と<structname>tenk1</structname>の濃度との積です
前と同様、推定される行数は単に前回同様、この値と<structname>tenk1</structname>のカーディナリティとの積です

<programlisting>
rows = 10000 * 0.003
Expand Down Expand Up @@ -560,10 +556,8 @@ tablename | null_frac | n_distinct | most_common_vals
count estimates for both relations (num_rows, not shown, but "tenk")
together with the column null fractions (zero for both):
-->
《マッチ度[62.269939]》今回の場合、すべての値が一意であるため、<structfield>unique2</structfield>に関する<acronym>MCV</acronym>情報がありません。
ですので、両リレーションの個別値数とNULL値の部分のみに依存したアルゴリズムを使用することができます。
《機械翻訳》この場合、<structname>unique2</structname>に対する<acronym>MCV</acronym>情報は存在せず、すべての値は一意であるように見えます(n_distinct = -1)。
そこで、両方の関係(num_rows、図示せず、ただし"tenk")に対する行数の推定値と列のNULL部分(両方ともゼロ)を使用するアルゴリズムを使用します。
この場合、<structname>unique2</structname>に関する<acronym>MCV</acronym>の情報はなく、すべての値が一意であるように見えます(n_distinct = -1)。
そのため、両方のリレーションの行数推定値((ここでは表示されていませんが"tenk"の)num_rows)と、列のNULL率(両方ともゼロ)に基づいたアルゴリズムが使用されます。

<programlisting>
selectivity = (1 - null_frac1) * (1 - null_frac2) / max(num_rows1, num_rows2)
Expand All @@ -580,10 +574,8 @@ selectivity = (1 - null_frac1) * (1 - null_frac2) / max(num_rows1, num_rows2)
Cartesian product of the two inputs, multiplied by the
selectivity:
-->
《マッチ度[76.946108]》これは、各リレーションにおいて、1からNULL部分を差し引き、個別値数の最大値で割った値です。
この結合が生成するはずの行数は、2つの入力のデカルト積の濃度に、この選択度を掛けたものとして計算されます。
《機械翻訳》これは、各リレーションに対してNULL分数を1から減算し、より大きなリレーションの行カウントで割った値です(この値は、一意でない場合にスケーリングされます)。
結合が発行する可能性のある行数は、2つの入力の直積のカーディナリティに選択性を掛けたものとして計算されます。
これは、各リレーションにおいて、1からNULL部分を差し引き、それを大きい方のリレーションの行数で割ります(この値は一意でない場合にはスケーリングされます)。
この結合が生成するはずの行数は、2つの入力のデカルト積のカーディナリティに、この選択度を掛けたものとして計算されます。

<programlisting>
rows = (outer_cardinality * inner_cardinality) * selectivity
Expand Down Expand Up @@ -681,7 +673,7 @@ ANALYZE t;
cardinality of <structname>t</structname> using the number of pages and
rows obtained from <structname>pg_class</structname>:
-->
<xref linkend="planner-stats"/>で説明されているように、<structname>pg_class</structname>から得られるページ数と行数を使って、<structname>t</structname>の濃度を決定できます
<xref linkend="planner-stats"/>で説明されているように、<structname>pg_class</structname>から得られるページ数と行数を使って、<structname>t</structname>のカーディナリティを決定できます

<programlisting>
SELECT relpages, reltuples FROM pg_class WHERE relname = 't';
Expand Down Expand Up @@ -787,7 +779,7 @@ EXPLAIN (ANALYZE, TIMING OFF) SELECT * FROM t WHERE a = 1 AND b = 1;
estimated number of rows returned by the HashAggregate node) is very
accurate:
-->
<command>GROUP BY</command>句が生成するグループ数のような、複数列の集合の濃度の見積もりについても、同様の問題が起きます。
<command>GROUP BY</command>句が生成するグループ数のような、複数列の集合のカーディナリティの見積もりについても、同様の問題が起きます。
<command>GROUP BY</command>の対象が単一の列なら、N個別値の推定(HashAggregateノードが返す推定行数で示されます)はとても正確です。
<programlisting>
EXPLAIN (ANALYZE, TIMING OFF) SELECT COUNT(*) FROM t GROUP BY a;
Expand Down
Loading