web-dev-qa-db-ja.com

PostgreSQL +クエリプランナー+エンティティの量

私は、クエリプランナーが統計を使用して最適なクエリプランを作成する方法について大学の課題に取り組んでいます。

57.1。行の見積もりの​​例 の記事を読み、PostgreSQLがデータベースから取得したエンティティの量を計算する方法を知っています。

しかし、RDBMSはどのようにしてどの行を取る必要があるかを決定します。たとえば、データベースは、現在のクエリには1000個のエンティティが必要であると計算しました。しかし、正確にはどれですか?それはどのように決定されますか?

3
Krzysztof Trzos

あなたが引用するマニュアルの章でその場所を見逃したかもしれません:

ANALYZEは統計の生成中にランダムサンプリングを使用するため、新しいANALYZEの後で結果がわずかに変化することにも注意してください。

強調鉱山。

質問で実際に「いくつの」行を意味する場合:クエリプランナーには、条件内の特定の演算子の選択性推定量があります。収集された統計と組み合わせて、プランナーはすべてのステップの行数を見積もります。

行の見積もりの​​詳細は、質問で既にリンクしているマニュアルの章に記載されています。

データ分布がテーブル内で非常に不均一である場合、推定は大きく外れる可能性があります。そのため、 default_statistics_target (および後でANALYZEを実行)の設定を上げると役立つ場合がありますそのような場合。

一部の特別な演算子には、特別な選択性推定量があります。テキスト検索のように。 src/backend/tsearch/ts_selfuncs.cのソースコードの詳細

2