I PostgreSQLで、次のクエリプランを持っている:PostgreSQL - クエリプランのソートノードのコストはどのように計算されますか?
Unique (cost=487467.14..556160.88 rows=361546 width=1093)
-> Sort (cost=487467.14..488371.00 rows=361546 width=1093)
Sort Key: (..)
-> Append (cost=0.42..108072.53 rows=361546 width=1093)
-> Index Scan using (..) (cost=0.42..27448.06 rows=41395 width=1093)
Index Cond: (..)
Filter: (..)
-> Seq Scan on (..) (cost=0.00..77009.02 rows=320151 width=1093)
Filter: (..)
私はちょうどソートにおける二つの値の正確な計算が行われているか疑問?私はそれがスキャンと添付のためにどのように動作するのか理解していますが、ソートコスト計算に関しては何も見つかりません。
あるSeqScanのためのような何か:
(disk pages read * seq_page_cost) + (rows scanned * cpu_tuple_cost)
計画のためのクエリがbasiclyこのようなものだった。(それはビューが含まれていますが、アイデアを得るためではない正確に)
SELECT * FROM (
SELECT *, true AS storniert
FROM auftragsposition
WHERE mengestorniert > 0::numeric AND auftragbestaetigt = true
UNION
SELECT *, false AS storniert
FROM auftragsposition
WHERE mengestorniert < menge AND auftragbestaetigt = true
) as bla
アンワリさん、あなたの質問は何ですか? – osgx
これは、同じテーブル上の2つの選択の連合で行われた、ビュー上の選択でした。 – Andwari
で編集します.Unionの2つの部分が重複しない場合(これが当てはまると思われます)、 'UNION ALL'を提案します。これは、ソート+除外のステップを避けることができます。 (またはbette:rは 'mengestornniert> 0 ... OR mengestorniert <...'を使って2つの部分を組み合わせます) – joop