質問: 動的なデータセットでテーブルを結合する 私のクエリでは、既存のテーブルとデータの動的セット(パラメータに基づいて取得)を結合したいと思います。私はこのシナリオを完了するための最良の選択肢が何であるかを研究していましたが、3つの選択肢に絞って終了しました。 ビュー、CTE、関数、CTE +関数 クエリは次のようになります ``` select id from table where id not in (select id from dynamic_set (param1, param2) ) ``` * ビューでは、すべてのデータをフィルタリングせずにプルする必要があります。 * テーブルの各行に対して関数を実行する必要があるため、クエリのパフォーマンスに影響する可能性があります。 * CTEと関数の組み合わせは、関数自体を使用する場合とほとんど同じですが、ローのみをフィルタリングし、パフォーマンスを少し上げるために最適化することができます。 * CTEはsimularからtempへのテーブルなので、私の質問はデータの大量のパフォーマンスに影響します。 私は可能な限り最良の解決策についてあなたの意見を聞きたい 参加してくれてありがとう
回答: ビューがすべてのデータを取得するわけではありません。別のクエリで使用できる名前付きクエリのようなものです。ビューがフィルタリングされると、そのビューに定義されたクエリにそのフィルタが追加されます。 CTEクエリはローカルビューによく似ていますが、定義されている場所でのみ参照できます(after; with)。また、これは具体化されておらず、(クラスタ化されたインデックスを追加することによって)ビューで行うことができるように、私はCTEクエリを実現する方法を知らない。 関数は最悪のオプションです、あなたはそれをなぜ言ったのですか? 「インライン」クエリがここでのみ使用される場合は、CTEの方法を選択します。