文章图片
文章图片
文章图片
文章图片
文章图片
系列文章五、如何选择普通索引和唯一索引《死磕MySQL系列 五》
六、五分钟 , 让你明白MySQL是怎么选择索引《死磕MySQL系列 六》
七、字符串可以这样加索引 , 你知吗?《死磕MySQL系列 七》
八、无法复现的“慢”SQL《死磕MySQL系列 八》
参与了好几个项目开发 , 每个项目随着业务量的增大 , MySQL数据日益剧增 , 例如其中一个项目中得用户足迹表 , 那是非常的疯狂 , 只怪我大意了 , 没有闪 。
这篇文章我会从delete对性能的影响 , 以及如何以正确的姿势来删除数据 。
在MySQL中Innodb存储引擎的表存在两部分 , 一部分是表结构 , 另一部分是表数据 。
在MySQL8.0之前/var/lib/mysql
下都会存在.frm文件 , 在MySQL8.0之后就不存在了 。 这是因为MySQL8.0中已经允许把表结构定义放到数据字典中了 , 是用参数innodb_file_per_table来决定的 。
一、表空间表空间分为几种 , 系统表空间、用户表空间、undo空间 。
系统表空间:MySQL内部的数据字典 , 如information_schema库下的数据 。
用户表空间:自己建立的表结构数据
undo空间:存储Undo信息 , 用于快速回滚 。
MySQL8.0之前表结构是在系统表空间存储的 , 在MySQL5.6.6后可以使用参数innodb_file_per_table来控制 。
设置为off时 , 表数据是放在系统表空间中 , 也就是MySQL的数据字典放在一起 。
设置为on时 , innodb存储引擎的表数据存储在.idb文件中 。
你知道表定义存储在哪里吗?
来到死磕MySQL系列的专用数据库kaka , 新建一张表evt_sms 。
猜一下创建的evt_sms表结构定义存储在哪里呢?
在information_schema库里边的TABLES中 , 执行查询SELECT TABLE_NAMETABLE_COMMENT FROM TABLES WHERE TABLE_TYPE='BASE TABLE';
我们自定义的表类型是TABLE_TYPE
。说了这么是为了解释如果把innodb_file_per_table
设置为off , 则表数据也会存放在这里 。
问题:如果数据存在放共享表空间中 , 表删除了 , 空间会删除吗?
答案是不会的 。
参数innodb_file_per_table设置为on数据存储在哪里呢?
一般情况下是在var/lib/mysql
中 , 会看到你创建的数据库 , 进入到数据库中就能看到一张表对应一个ibd文件 。
数据就是存储在这里 。
结论
在项目开始阶段 , 切记将innodb_file_per_table设置为on , 这是正确的做法 。
- 三星|流畅用三年,两千价位机型,为什么说这款最值得买?
- 登月|阿姆斯特朗勘探地下洞穴时,比登月还激动,因为发现了黄金天书?
- 亚马孙热带雨林|“地球之肺”亚马逊雨林,为什么是人类禁区?到底有多恐怖?
- 3g|这6个多条件函数都不掌握,还敢称Excel达人?
- ipad mini|想入手iPad mini 5,又觉得没什么用,iPad实用性在哪里?
- 数字货币|为什么都抢着搞元宇宙?数字货币未来或会遍及全球,改变世界格局
- 杭州|神秘的金属球,能吸收太阳能,还有管风琴音乐,是外星人的杰作?
- 相机|了解眼睛有多神奇:人眼像素高达5.76亿,意味着什么?
- 行星|为什么NASA要重返月球?答案会是这样的?
- 花豹|猎豹和花豹有什么区别?它们可以杂交产生后代吗?