mysql删除操作其实是假删除

在InnoDB数据库引擎中执行DELETE操作并不会真正删除数据,而是将数据标记为删除。
这意味着删除过程并没有减少表空间的大小,这是错误的删除。
我们用一个例子来证实这个结论。
创建存储过程,插入10万条,检查预留空间。
10万条包含3.52MDELETE,表空间大小保持不变,这就保证了删除操作只是指向数据,并没有真正删除数据。
标记为删除的数据可以重复使用。
例如,删除某条记录中的一条记录,就会标记出该位置,当输入符合条件的记录时,可以重新使用该位置。
删除数据页上的所有符号后,整个页可以重新使用,并且插入限制小于如果重新使用行。
当输入的记录与标记的位置不对应时,它提供了重新使用数据页的可能性。
删除会造成数据空洞、浪费空间并影响查询效率。
每次磁盘访问对应一次IO操作,空洞会增加IO次数并降低请求速度。
插入和更新操作也会产生漏洞,从而影响表性能。
频繁的增删改查会导致数据空洞,占用大量空间,降低查询效率,表现为查询速度变慢。
解决办法是重建表,创建临时表,重新插入数据,替换原来的表。
重建过程释放了表空间并减少了空洞的影响。
使用rebuild命令也能得到类似的结果,建议实际验证。
在InnoDB引擎下,其他数据库引擎的行为可能有所不同。

如何查看MySQL数据库容量大小,表容量大小,索引容量大小?找到占用空间最大的表

如何查看MySQL数据库容量、表容量和索引容量?你可以在MySQL自带的information_schema库的表中找到你需要的信息。
在每个MySQL实例中,该信息包含有关所有数据库、表和索引的详细信息。
打造属于自己的“数据库容量仪表盘”,并一键分享给合作伙伴,本文提供了如何使用卡拉云1分钟创建“数据库容量仪表盘”的教程。
使用information_schema库中的tables表,可以查询数据库、表、索引能力。
MySQL手册中详细给出了有关information_schema的更多信息。
查询时请注意,data_length和index_length字段中存储的容量信息是以字节为单位的,需要除以21024才能转换为MB。
查询步骤如下:1.查看所有库的容量2.查看指定库的容量3.查看指定库中所有表的容量4.查看指定库中指定表的容量5查看数据库表6中排名前10的容量。
查看指定库容量前10名的表。
本教程提供了有关查询表大小的所有实际案例。
强烈建议保存它们以供以后使用。
如果对您有用,请点赞评论,有问题也欢迎留言讨论。
有关为KaraCloud创建数据库容量仪表板的完整教程可以在此处找到。