以下の2つの方法の間にパフォーマンスの違いがあるかどうかは疑問でした。 基本的には、IDのスペースとダッシュを許可していますが、一部の従来のアプリケーションではこれらを使用できないため、削除されています。 私が見る限り、これを行うための最もきれいな方法は、引き金や計算された列のいずれかです。 SQLは以下に示されています(エラーが発生した場合には匿名で匿名で返信されます) これまでのテストサーバーでは、2つの方法の違いはありませんでした。代わりにトリガまたは計算列?それは良いですか?
[データベースのSQL Server 2008] [ルックアップテーブル20000000行と成長]
オプション1 - トリガーを作成します
CREATE TRIGGER triMem_Lkup on Mem_Lkup
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO Mem_lkup
SELECT ex_id, contact_gid, id_type_code, date_time_created,
(replace(replace([ex_id],' ',''),'-','')) as ex_id_calc
FROM inserted
END
GO
対オプション2 - 計算された列を使用
CREATE TABLE [dbo].[Mem_lkup](
[mem_lkup_sid] [int] IDENTITY(1,1) NOT NULL,
[ex_id] [varchar](18) NOT NULL,
[contact_gid] [int] NOT NULL,
[id_type_code] [char] (1) NOT NULL,
[date_time_created] [datetime] NOT NULL,
[ex_id_calc] AS CAST(replace(replace([ex_id],' ','') ,'-','') AS varchar(18)) PERSISTED
CONSTRAINT [PK_Mem_Lkup] PRIMARY KEY NONCLUSTERED
(
[mem_lkup_sid] ASC
)
どちらが最適ですか?
計算カラムがインデックスの一部として使用されているため、計算カラムを保持する必要があると思いました。 (http://msdn.microsoft.com/en-us/library/ms189292.aspx#BKMK_persisted) これは間違っていますか? –
@ EoinO - Nope。この場合ではなく、不正確な(浮動小数点)値またはCLR関数/型の場合のみです。 –
ありがとう@Martin、あなたの答えは本当に有益でした! Re:永続的なコメント、何千ものレコードを実行している場合、この値は毎回計算されますか? –