Я делаю небольшой тест. Следующий код выполняет 3 случайных запроса 1000 раз (к таблице innoDB):
delimiter //
create procedure dtest ()
begin
declare v_max int;
declare v_counter int default 0;
declare holder int;
set v_max = 1000;
truncate table user;
start transaction;
while v_counter < v_max do
# random query
insert into user (username) values (CONCAT("user", floor(0 + (rand() * 65535))));
select count(*) from user into holder;
select count(*) from user where username = 'user' into holder;
set v_counter = v_counter + 1;
end while;
commit;
end //
Я запустил приведенный выше код с start transaction;
и commit;
, а затем снова удалил эти два оператора.
Идея заключалась в том, что я хотел посмотреть, будет ли он работать медленнее с определенной транзакцией, чем без нее.
Я обнаружил, что первый тест с start transaction/commit
тест выполняется в течение ~ 7 секунд. Когда я удалил start transaction/commit
, запрос выполняется через ~ 15 секунд!
Это была намного большая разница, чем я ожидал. Интересно, есть ли что-то, чего я не понимаю?