私は小さなテストをしています。 3つのDBクエリを1k回実行すると、トランザクションでは2回のクエリが実行されます。正しい?
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;
で上記のコードを実行し、次のコードは1000倍(のInnoDBテーブルに対して)3つの、ランダムなクエリを実行します。
私は、それが定義されていないトランザクションよりも遅く実行されているかどうかを確認したいと考えていました。
私が見つけたのは、最初のテストとstart transaction/commit
で、テストは約7秒で実行されたことでした。 start transaction/commit
を削除すると、クエリは〜15秒後に実行されます。
これは予想以上に大きな違いでした。私は理解していないものがあるのだろうか?