wanyong117

清风随我度

导航

为什么透过链接服务器写入,速度会很慢

为什么透过链接服务器写入,速度会很慢
 
原因是 通过链接服务器写入时,是逐行写入数据库,逐行insert,触发触发器等等
,写入的数据有几行,就触发几次触发器,inserted,deleted等系统表每次只有一行数据
 
如果是同一台服务器插入的时,一个sql命令是批量插入的,只触发一个触发器,inserted,deleted会有多行数据
 
测试用例:
建表: 
CREATE TABLE [dbo].[TEST_BATINSERT](
    [PLUCODE] [varchar](20) NULL,
    [SCANCODE] [varchar](20) NULL
) ON [PRIMARY]
 
建触发器:
CREATE TRIGGER [dbo].TEST_BATINSERT_INSERT
ON [dbo]. [TEST_BATINSERT]
FOR INSERT
AS
BEGIN
                IF UPDATE (plucode)
                BEGIN
IF (select len( ltrim(rtrim (plucode))) from inserted ) > 2--这种写法当isnerted只有一行数据时,可以执行通过,有多行数据时,语法不正确,会报错
                BEGIN
                               IF isnumeric ((select ltrim(rtrim (plucode)) from inserted )) = 1
                               BEGIN
                                              SELECT 1
                               END
                END
                END
END
测试语句
语句1
INSERT TEST_BATINSERT( PLUCODE,SCANCODE )
SELECT TOP  1 PLUCODE,SCANCODE
FROM TEST_BATINSERT_1
  测试结果,没问题,说明触发器中的inserted语句只有一行数据
语句2
INSERT TEST_BATINSERT( PLUCODE,SCANCODE )
SELECT TOP 2 PLUCODE,SCANCODE
FROM TEST_BATINSERT_1
    测试结果:不正常。说明触发器中的inserted语句有多行数据
 
在另外一台服务器上执行:
语句1
INSERT [LNKSER]. LNKDB.dbo .TEST_BATINSERT( PLUCODE,SCANCODE )
SELECT TOP 1 productNo,productNo
FROM [TEST_BATINSERT_1]
 
  测试结果,没问题,说明触发器中的inserted语句只有一行数据
语句2
INSERT [LNKSER]. LNKDB.dbo .TEST_BATINSERT( PLUCODE,SCANCODE )
SELECT TOP 2 productNo,productNo
FROM TEST_BATINSERT_1
 
  测试结果,没问题,说明触发器中的inserted语句只有一行数据
 
结论:如果要进行跨服务器交换数据,尽量用链接服务器进行读操作,避免进行写和删的操作。

posted on 2016-08-12 13:47  我的.net之旅  阅读(1447)  评论(1编辑  收藏  举报