Запрос просто вставляет одно и то же значение 'hello' в таблицу 1000 раз.
Когда этот запрос выполняется в явной транзакции - с переносом в begin tran
и commit tran
- он выполняется мгновенно. Но, если операторы begin tran & commit tran
закомментированы, это займет примерно 8 секунд!
Может кто-нибудь объяснить, пожалуйста?
См. Оба запроса + результаты ниже:
Явный:
/*------------------------
drop table Test
create table Test (Name varchar(10))
begin tran
set nocount on
declare @i int = 1000
select 'START: ', getdate() -- trick to get row title printed
while (@i > 0)
begin
insert into Test (Name)
select 'hello'
set @i = @i - 1
end
select 'END: ', getdate() -- trick to get row title printed
commit tran
------------------------*/
START: 2019-10-30 17:50:54.283
END : 2019-10-30 17:50:54.313
Неявный:
/*------------------------
drop table Test
create table Test (Name varchar(10))
--begin tran
set nocount on
declare @i int = 1000
select 'START: ', getdate() -- trick to get row title printed
while (@i > 0)
begin
insert into Test (Name)
select 'hello'
set @i = @i - 1
end
select 'END: ', getdate() -- trick to get row title printed
--commit tran
------------------------*/
START: 2019-10-30 17:51:48.203
END : 2019-10-30 17:51:56.520
РЕДАКТИРОВАТЬ: в моих настройках подключения IMPLICIT_TRANSACTIONS = OFF. То, что я имел в виду под «неявной транзакцией» выше, это просто отсутствие явной транзакции.