表示またはユーザー定義の機能?
-
02-10-2019 - |
質問
2つのテーブルを1つ(Unionを使用して)に組み合わせて、他のテーブルのデータに参加するシナリオがあります。
ビューまたはUDF/ユーザー定義関数のいずれかでこれを行うことができます。
データベースにはこれまでのところ見解がまったくないが、フルテキスト検索などのUDFがかなり多くあることを考えると、このシナリオにもUDFを使用して「クリーン」に保つようになります。
ただし、これは完全に主観的であり、このシナリオでビューまたはUDFのいずれかに行くためのより良い客観的な理由があるのではないかと思いました。
私は両方のクエリプランを比較しましたが、それらはまったく同じですので、どちらかを使用するためのパフォーマンスのペナルティや利点があるとは思いません。
他の1つを選択する他の理由はありますか、それとも問題ではありませんか?
解決
私は常に洗練された順に機能を使用します。ビューは、パフォーマンスプロファイルとセキュリティ管理の点で比較的簡単です。私はおそらく最初にそれを使用するでしょう。
私はあなたがインラインのテーブル値UDFについて話していると仮定しています。 UDFのセキュリティは少し異なり、ビューで「挿入」を行うことができるトリガーの代わりに、あなたは持つことはできません。 UDFの利点は、パラメーターを強制的に提供することができることです。これにより、使用パターンが予想どおりであることを確認しますが、基準なしではビューを(おそらく誤って)照会することができます。
パラメーター化のためにUDFを持ちたいと思った場合、それをビューの上に重ねることができます(コードの複製はありません)。オプティマイザーはビューとインラインTVFを公平に組み合わせることができるため、パフォーマンスが大きく影響を受けないことがわかります。正常に。
他のヒント
このシナリオをビューとして使用することで見られる利点の1つは、それらをインデックスを付けて「インデックスビュー」として使用することです。従来のビューとは異なり、作成される物理ファイルがあるため、かなりの量の行がある場合はクエリが速くなります。これを使用することのまさにその効果は、すべての行に対して結合と組合をバイパスすることです。代わりに、新しい行に対してのみそれらを構築することです。
私たちの友人のケードが提案したように、あなたはUDF内のビューを使用してそれをきれいに保ち、それはそれほど違いはありません。
お役に立てれば !