to: mrzho(mrzhou) 我用下面的触发器进行测试: create trigger TestTmp on tmp for insert as begin declare @i int select @i=count(*) from inserted print @i update tmp1 set i=i+@i end 对于TMP1表的取值用INSERT INTO 。SELECT 。所的到的结果和用WHILE 循环所得到的结果是一样的! 不过@i的值是不同!用WHILE 是1,1,1,1 而INSERT 。SELECT 是4 说明用INSERT 。SELECT 的时候只触发了一次触发器
而insert into values 比insert into select 慢的很多可能的原因是 你每一次执行insert into values 都需要服务器预先编译解释一次,而insert into select却只需要编译一次, 还有就是损耗在循环上的时间。
insert ...select 是不到一分
原因应该是i/o时间的差别.
是不是每个insert into values 每次都读叶,然后在存储?????????????
那位大虾说清楚一些!
而在INSERT SELECT 中只有一个INSERT 所以只检测一次,而INSERT INTO 。。 VALUES 就进行了若干次检测,所以相比起来速度相差很大(特别是在记录很多的情况下)。
我定义变量 @i int 循环累加 ,插入到表tablename(id int)
10000个记录都会很长时间
是不是i/o影响的速度
所以相比起来insert values 比 insert select 慢很多。
create trigger updaterecnum on TableA for insert
as
declare @nums int
select count(*) from inserted
update mytable set nums = nums + @nums如果用INSERT ... VALUES 的话,nums的值是正确的,而insert ... select 时nums 的值为1
因为sqlserver不是组行触发
你为什么不自己试试再看?
create trigger TestTmp
on tmp
for insert
as
begin
declare @i int
select @i=count(*) from inserted
print @i
update tmp1 set i=i+@i
end
对于TMP1表的取值用INSERT INTO 。SELECT 。所的到的结果和用WHILE 循环所得到的结果是一样的!
不过@i的值是不同!用WHILE 是1,1,1,1 而INSERT 。SELECT 是4
说明用INSERT 。SELECT 的时候只触发了一次触发器
你每一次执行insert into values 都需要服务器预先编译解释一次,而insert into select却只需要编译一次,
还有就是损耗在循环上的时间。
可能是sql对values要进行类型判断吧。。
在SQL Profile,唯一区别是i/o写的数目比insert into values小。
不知道的不要谁边说!!!!!!!!!!!!!
大家有概念吗,循环不是很慢的,慢在i/o操作!!
我只是想知道SQLSERVER的写操作如何执行!
难道是日志写多拉?
还是有几种存储方法?