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删除数据的过程是什么样的?的更多相关文章

  1. mysql 控制台环境下查询中文数据乱码,插入、更新中文数据不成功

    mysql 控制台环境下查询中文数据乱码,插入.更新中文数据不成功         登录mysql密码是加入编码参数--default-character-set,中文用gbk mysql -uroo ...

  2. 【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  导读和注意事项 各位技术爱好者,看完本文后, ...

  3. MySQL插入,更新,删除数据

    插入 单行插入 1.insert into 表名 values(col1_value,col2_value,...); 每个列必须提供一个值,如果没有值,要提供NULL值 每个列必须与它在表中定义的次 ...

  4. (笔记)Mysql命令drop table:删除数据表

    drop table命令用于删除数据表. drop table命令格式:drop table <表名>; 例如,删除表名为 MyClass 的表:    mysql> drop ta ...

  5. mysql——插入、更新、删除数据(概念)

    一.插入数据 1.为表的所有字段插入数据 -------------------------------------------------------------------------- (1)i ...

  6. MySQL插入、更新、删除数据

    1.插入数据:由于下表的id会自增,故赋值null. 注意:字符串用'   '单引号,不能双引号,英文状态下. 可以写上部分属性名进行插入操作,如bookTypeId没写,默认NULL. 也可以写上所 ...

  7. 【MySQL】Linux下mysql安装全过程——小白入门篇(含有问题详解)

    本次安装操作在申请的腾讯云上实现(版本:CentOS Linux release 7.4.1708 (Core) ). 根据教程实现(中途各种挖坑,填坑...),地址:http://www.runoo ...

  8. MySQL<添加、更新与删除数据>

    添加.更新与删除数据 添加数据 为表中所有字段添加数据 INSERT INTO 表名(字段名1,字段名2,……) VALUES(值1,值2,……); insert into 表名 values(值1, ...

  9. mysql——插入、更新、删除数据(示例)

    插入数据 一.前提,新建表: ), sname ), sage ), ssex ) ); select * from student; 二.多种方式插入数据: ','zhaolei','1990-01 ...

随机推荐

  1. C# 基础知识系列- 14 IO篇 文件的操作

    0. 前言 本章节是IO篇的第二集,我们在上一篇中介绍了C#中IO的基本概念和一些基本方法,接下来我们介绍一下操作文件的方法.在编程的世界中,操作文件是一个很重要的技能. 1. 文件.目录和路径 在开 ...

  2. 【Linux网络基础】上网原理流程

    1. 局域网用户上网原理 上网过程说明: 确保物理设备和线路架构准备完毕,并且线路通讯状态良好 终端设备需要获取或配置上局域网(私有地址)地址,作为局域网网络标识 当终端设备想上网时,首先确认访问的地 ...

  3. 标准库shutil

    shutil模块是高级的 文件.文件夹.压缩包 处理模块. 下面是关于其中各种方法的使用介绍: 1.shutil.copyfileobj(fsrc, fdst[, length])将文件内容拷贝到另一 ...

  4. Django入门2:路由系统

    1.单一路由对应 url(r'^index/', views.index), # FBV url(r'^home/', views.Home.as_view()), # CBV 2.基于正则的路由 u ...

  5. DM 源码阅读系列文章(六)relay log 的实现

    2019独角兽企业重金招聘Python工程师标准>>> 作者:张学程 本文为 DM 源码阅读系列文章的第六篇,在 上篇文章 中我们介绍了 binlog replication 处理单 ...

  6. IT服务,共享经济的下一个风口?

    前两天,在上千名CIO参加.释放10亿采购需求的2017华南CIO大会暨信息技术交易会上,一款"一站式IT工程师共享平台"成为大会关注焦点--这就是神州数码旗下的神州邦邦. 其实最 ...

  7. 2018年要学习的10大Python Web框架

    通过为开发人员提供应用程序开发结构,框架使开发人员的生活更轻松.他们自动执行通用解决方案,缩短开发时间,并允许开发人员更多地关注应用程序逻辑而不是常规元素. 在本文中,我们分享了我们自己的前十大Pyt ...

  8. C# richtextbox 自动下拉到最后 方法 & RichTextBox读取txt中文后出现乱码

    C# richtextbox 自动滚动到最后  光标到最后 自动显示最后一行 private void richTextBox1_TextChanged(object sender, EventArg ...

  9. Leo2DNT(雷傲论坛转DiscuzNT)1.0转换程序发布

    数据转换程序 雷傲论坛(Leobbs4.x) -> Discuz!NT V1.0    本转换程序基于Leobbs4.x设计     声明: 1.本程序只对数据作转换,不会对原来的雷傲论坛(数据 ...

  10. 信息竞赛进阶指南--递归法求中缀表达式的值,O(n^2)(模板)

    // 递归法求中缀表达式的值,O(n^2) int calc(int l, int r) { // 寻找未被任何括号包含的最后一个加减号 for (int i = r, j = 0; i >= ...