問題タブ [distinct-on]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
postgresql - テーブルとビューに対する GROUP BY と DISTINCT ON の動作の違い
テーブルDesign
と、そのテーブルの というビューがありますArchivedDesign
。ビューは次のように宣言されます。
次に、最新の変更、サムネイルなどの短い要約を取得する大きなクエリがあります。クエリ全体は重要ではありませんが、2 つのほぼ同一のサブクエリが含まれています。1 つはメイン テーブル用で、もう 1 つはビュー用です。
と
SQL フィドルへのリンク: http://sqlfiddle.com/#!17/d1d0f/1
クエリはテーブルに対して有効ですが、ビューに対してはエラーで失敗しますcolumn x."Modified" must appear in the GROUP BY clause or be used in an aggregate function
。これら 2 つのクエリの動作に違いがある理由がわかりません。テーブル クエリと同じようにビュー クエリを修正するにはどうすればよいですか?
私の最終的な目標は、すべてのテーブル サブクエリをビュー サブクエリに置き換えて、ドラフト、アクティブ、およびアーカイブされたデザインを簡単に分離できるようにすることです。
postgresql - サブクエリで個別に使用すると PostgreSQL のパフォーマンスが低下するのはなぜですか?
users
フィールドid
とを持つテーブルがありますemail
。id
は主キーであり、email
インデックスも作成されます。
サブクエリで句を使用してテーブルをクエリすると、distinct on (email)
パフォーマンスが大幅に低下します。
これをdistinct on (id)
、コストが前のクエリの 1000 分の 1 未満のクエリと比較します。
どうしてこれなの?
私が抱えている本当の問題はdistinct on
、一意ではないインデックス付きの列を実行するビューを作成しようとしていて、パフォーマンスが非常に悪いことです。