我想知道以下两种方法在性能方面是否有区别。
基本上,问题是我们允许ID中包含空格和短横线,但某些旧应用程序无法使用它们,因此这些字符会被删除。
据我所见,最简洁的方法是在触发器或计算列中完成。下面是 SQL 代码(已清理和匿名化,如果出现错误,请谅解)。
到目前为止,在我们的测试服务器上,似乎两种方法没有任何区别,还有其他人有什么意见吗?
[数据库:SQL Server 2008] [查找表:20000000 行且不断增长]
选项1 - 创建触发器
对比 选项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
)
哪一个是最好的?