众所周知 在 MySQL 中使用 innodb 的话, show engine innodb status 这个命令必知必会。
今天来讲一讲这个的一些知识点。
我们先建立 3 个表。
表很简单。
写一段存储过程。
BEGIN
DECLARE v int;
SET v = 0;
loop_label: LOOP
insert into t1 (id,name) values (v,'a');
SET v = v + 1;
IF v>=1000000 THEN
LEAVE loop_label;
END IF;
end loop;
END
每个表插入100万数据。三个表3个存储过程。对应的地方自己改改。
数据库重启一下。这个 insert , update , delete , read 就
我们模拟一下。
可以看到 insert 和 update 以后通过 show engine innodb status 配合管道插入和更新都有 1 条。
接下来是一个 count 。 Count 多少读多少。所以 read 上升。读多少条,增加多少。
同样如果通过索引访问。那么就增加的即索引条目。这样 read 就很少增加。
但是如果 where 条件没有用到索引。执行了全表,那么 read 还是增加的。
所以索引很重要。
再做一个实验。执行这句 select 。
就是一个分组聚合。注意是多个表进行关联。
这个时候不仅读增加,居然 insert 还有 100 万的增加。这说明多表关联的时候,在一些聚合的场景下,会对系统增加额外的负荷。应该避免。
继续深入。如果多表关联,用到索引或者说返回数据较少。(因为有时候即使用的索引返回数据也很多)那么是不会产生额外的 insert 的。
对比一下。这个文件在几次操作后变大了。从 12M 到 76M 。这就是额外 insert 造成的。
这是原表的大小。说明表越大,返回数据越多,那么 tmp 文件就越大。越容易带来问题。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/637517/viewspace-3154253/ ,如需转载,请注明出处,否则将追究法律责任。