【MySQL】详细说下MySQL删除数据的过程是什么样的?
drop table
- 这里先介绍一下【InnoDB】存储表空间概念:
Innodb存储引擎,可将所有的数据库数据存放于【ibdata1】的共享表空间;也可以将每张表存放于独立的.idb文件的独立表空间
(共享表空间和独立表空间都是针对数据的存储方式而言的。)
》共享表空间:某一个数据库的所有表数据都存放在一个文件中,默认这个共享表空间的文件路径在data目录下。 默认的文件名【ibdata1】,初始化为10M。 》独立表空间:每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个【.frm】表描述文件,还有一个【.ibd】文件。 其中这个文件包括了单独一个表的数据内容以及索引内容,默认情况下它的存储位置也是在表的位置之中。
- 在【mysql】配置文件中有一个参数【innodb_file_per_table】,可以用来控制【innodb】对于表数据的存储规则。
》设置为ON:表示为每个innodb的表数据存在一个单独的【.idb】文件中。
在【drop table】的时候系统就会直接删除【.idb】文件,系统磁盘空间自然就释放了。 》设置为OFF:表示为所有表数据存放在系统共享表空间中,也就是跟数据字典放在一起。
- 共享表空间和独立表空间的优缺点比较:
- 共享表空间
优点:可以将表空间分成多个文件存放到各个磁盘上(表空间文件大小不受表大小限制,如一个表可以分布在不同的文件上)。数据和文件在一起方便管理
缺点:对于统计分析、日志系统这类应用不适合用共享表空间,因为多个表及索引在表空间混合,大量删除操作后会造成大量空间间隙。
- 独立表空间
优点:
1》每个表都有自己的独立空间
2》每个表的数据和索引都存在自己的独立空间
3》可以实现表在不同的数据库中移动
4》空间可以回收:
a.【drop table】可以自动回收表空间
b.删除大量数据后,可通过指令【alter table [tablename] engine=innodb】重建表,来回缩空间
c.对于【innodb-plugin 的 innodb】,使用指令【turncate table】也会使空间收缩
d.独立空间表的使用,表空间的随便不会太影响全局性能,也方便处理
- 现在我们可以说说【drop table】方式删除数据:
drop table #操作会删除所有表数据以及结构
delete table
- 数据的删除流程:
1》MySQL在删除一条记录的时候,只是把这行记录标记为删除,但不会回收磁盘空间,被标记删除的位置可以被复用;
2》所以说【delete】命令只是把记录的位置或者数据页标记为【可复用】,但磁盘大小不会改变。这些可复用而没有使用的空间,看起来像个【空洞】。
- 所以此时可能会出现表空间不释放的问题
不止删除会造成数据空洞,插入数据也会,如果数据是随机插入的,就可能会造成索引的数据页分裂。
上图是一个分裂前的B+Tree,此时B+Tree分裂后:
- 重建表可以解决存在很多【空洞】的问题,从而收缩空间
alter table A engine = InnnDB #可以重建表
【MySQL】详细说下MySQL删除数据的过程是什么样的?的更多相关文章
- mysql 控制台环境下查询中文数据乱码,插入、更新中文数据不成功
mysql 控制台环境下查询中文数据乱码,插入.更新中文数据不成功 登录mysql密码是加入编码参数--default-character-set,中文用gbk mysql -uroo ...
- 【MySQL】Linux下MySQL 5.5、5.6和5.7的RPM、二进制和源码安装
[MySQL]Linux下MySQL 5.5.5.6和5.7的RPM.二进制和源码安装 1.1 BLOG文档结构图 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱好者,看完本文后, ...
- MySQL插入,更新,删除数据
插入 单行插入 1.insert into 表名 values(col1_value,col2_value,...); 每个列必须提供一个值,如果没有值,要提供NULL值 每个列必须与它在表中定义的次 ...
- (笔记)Mysql命令drop table:删除数据表
drop table命令用于删除数据表. drop table命令格式:drop table <表名>; 例如,删除表名为 MyClass 的表: mysql> drop ta ...
- mysql——插入、更新、删除数据(概念)
一.插入数据 1.为表的所有字段插入数据 -------------------------------------------------------------------------- (1)i ...
- MySQL插入、更新、删除数据
1.插入数据:由于下表的id会自增,故赋值null. 注意:字符串用' '单引号,不能双引号,英文状态下. 可以写上部分属性名进行插入操作,如bookTypeId没写,默认NULL. 也可以写上所 ...
- 【MySQL】Linux下mysql安装全过程——小白入门篇(含有问题详解)
本次安装操作在申请的腾讯云上实现(版本:CentOS Linux release 7.4.1708 (Core) ). 根据教程实现(中途各种挖坑,填坑...),地址:http://www.runoo ...
- MySQL<添加、更新与删除数据>
添加.更新与删除数据 添加数据 为表中所有字段添加数据 INSERT INTO 表名(字段名1,字段名2,……) VALUES(值1,值2,……); insert into 表名 values(值1, ...
- mysql——插入、更新、删除数据(示例)
插入数据 一.前提,新建表: ), sname ), sage ), ssex ) ); select * from student; 二.多种方式插入数据: ','zhaolei','1990-01 ...
随机推荐
- 解决从dockerhub上下载debian:jessie失败
解决从dockerhub上下载debian:jessie失败 笔者使用docker build 构建镜像出现下面的错误 Step 1/12 : FROM debian:jessie Get https ...
- 5.Python是怎么解释的?
Python是怎么解释的? Python language is an interpreted language. Python program runs directly from the sour ...
- Spring绑定请求参数过程以及使用@InitBinder来注册自己的属性处理器
在工作中,经常会出现前台的请求参数由于无法被正常转型,导致请求无法进到后台的问题. 比如,我有一个User.其性别的属性被定义成了枚举,如下: public enum Gender { MALE(&q ...
- 瑞银预计小扎的十年规划可获大回报 上调Facebook股票目标价
瑞银认为马克·扎克伯格(Mark Zuckerberg)为Facebook定制的十年规划将带来丰厚回报,它已将Facebook股票的目标价由之前的155美元上调至165美元. Facebook首席执行 ...
- Codeforce 1155D Beautiful Array(DP)
D. Beautiful Array You are given an array aa consisting of nn integers. Beauty of array is the maxim ...
- MySQL Windows 环境安装
1.下载 MySQL Windows 安装包 下载地址:https://downloads.mysql.com/archives/installer/ 我这个是 MySQL 5.7 版本 2.直接双击 ...
- Spring Boot 集成 Flyway 实现数据库版本控制
在项目迭代开发中,难免会有更新数据库 Schema 的情况,比如添加新表.在表中增加字段或者删除字段等,那么当我对数据库进行一系列操作后,如何快速地在其他同事的电脑上同步?如何在测试/生产服务器上快速 ...
- java读源码 之 map源码分析(HashMap)二
在上篇文章中,我已经向大家介绍了HashMap的一些基础结构,相信看过文章的同学们,应该对其有一个大致了了解了,这篇文章我们继续探究它的一些内部机制,包括构造函数,字段等等~ 字段分析: // 默 ...
- 消息队列高手课 -笔记-Kafka高性能的几个关键点
总结下kafka 高性能的几个关键点是: 1:使用批量处理的方式 去提升系统的吞吐能力 2:基于磁盘文件高性能的顺序读写的特性来设计存储结构 3:利用操作系统的PageCache 来缓存数据 减少I ...
- 【Spark】RDD的依赖关系和缓存相关知识点
文章目录 RDD的依赖关系 宽依赖 窄依赖 血统 RDD缓存 概述 缓存方式 RDD的依赖关系 RDD和它依赖的父RDD的关系有两种不同的类型,即窄依赖(narrow dependency) 和宽依赖 ...