码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-08-12 14:56:16      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

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

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

标签:

原文地址:http://www.cnblogs.com/wanyong117/p/5764644.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!