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

为什么透过链接服务器写入,速度会很慢
 
原因是 通过链接服务器写入时,是逐行写入数据库,逐行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语句只有一行数据
 
结论:如果要进行跨服务器交换数据,尽量用链接服务器进行读操作,避免进行写和删的操作。

转载于:https://www.cnblogs.com/wanyong117/p/5764644.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值