gpt4 book ai didi

mysql - 使用事务运行 3 个数据库查询 1k 次是没有事务的两倍。正确的?

转载 作者:可可西里 更新时间:2023-11-01 08:53:17 25 4
gpt4 key购买 nike

我正在做一个小测试。以下代码运行 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 秒内运行!

这比我预期的要大得多。我想知道是否有什么我不明白的地方?

最佳答案

在这种情况下,简单的答案是,写入合并允许合并的 INSERT(查询循环的结果)比单个查询更快地访问磁盘。

答案并不简单,这在很大程度上取决于您的硬件和操作系统 - 例如具有最先进的 SSD(可能受 CPU 限制)的 Intel Atom 与具有 5400rpm 磁盘(可能受磁盘限制)的 i7 的 react 不同。

此外,这在很大程度上取决于您的并发性:在您的实验中,没有涉及并发性,这是事务的最佳情况。并行重试 100 个线程可能会得到不同的结果。

关于mysql - 使用事务运行 3 个数据库查询 1k 次是没有事务的两倍。正确的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9312657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com