データベースにはGUIDが主キーとして格納されていますが、これは複数のシステム間で一意性を強制するためです。あなたはSQL計算フィールド効率
のような選択を行うので、もし私は、計算フィールドを追加したテーブルが少し優しいようにするには
(ええ、私はテーブルごとに行あたり16のバイトがオーバーヘッド他のオプションが、同社の選択肢があります知っています)あなたは外部キーを持つ列を取得するだけでなく、関連するフレンドリーなフィールドを取得します。
CompanyGUID(ストアドフィールド)、会社名(計算フィールド)
計算フィールドのようなスカラー関数を経由して実行します:
CREATE FUNCTION [mySchema].[udf_CompanyNameFromGUID] (@GUID UNIQUEIDENTIFIER)
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @Return NVARCHAR(MAX)
SELECT @Return = CompanyName
FROM mySchema.Companies
WHERE CompanyGUID = @GUID
RETURN @Return
END
私は、これらのルックアップが主キー/クラスタ化に対して常にあることを指摘すべきですインデックスは個々に私が作ることができるほど速いです。
これは、問題を追跡しているときに大きな利点がありますが、大きなテーブルにクエリを実行すると、主な使用効率に影響はありません(計算されたフィールドはクエリされないため、影響はありません)ルックアップを行うにはしばらく時間がかかります。私は探している余分なデータを犠牲にしたくないので、テーブルに直接格納したくない(データの無駄遣いとメンテナンスが必要になる)。私は各テーブルのビューを構築することを考えましたが、それは過剰なもののように思え、むしろその努力を倍増させる必要はありません。
私はこのように働く唯一の人ではないと確信しています。誰かがこれを行うより効率的な方法を持っているかどうか知りたいのですが?これらのフィールドは、データベースを直接見ている人だけが使用し、すべてのストアドプロシージャなどはすべて索引付きリンクなどで完全にコーディングされています。大きな問題ではありませんが、もっと良い解決策があればそれを聞いてみたいと思います。
ありがとうございます。
したがって、開発者にとって使いやすくするために、計算された列をスカラー関数を使用してテーブルに追加しますか?彼らは単に結合を書く方法を学ぶべきではありませんか?あなたがしようとしているものよりも少ない労力で結合を入力するように思えます。 –
正直言って私は他の誰と同じくらいここでデータをトレースしています。より直観的であれば良いです。データに時間を費やしているすべての人(そして1人の女の子)は、ジョインを書くことができます。ジョインは、毎回何度も何度も何度もやり直す必要があります。むしろ一度やり直して、もう一度やり直す必要はありません。 –
または、それらの結合を行うビューを作成します。これをスカラーUDFにラップすると、パフォーマンスが非常に低下します。すべてのルックアップでRBARネストループを使用し、スカラーUDFに関連するさまざまな問題が発生します。 –