一、innodb_file_per_table 的简要说明:

  在很久很久以前也就是说还没有innodb_file_per_table 的那个年代,所有的innodb表的数据都是保存在innodb系统表空间中的,

  在有了innodb_file_per_table参数后innodb可以把每个表的数据单独保存。单独保存有两方面的优势一个是方便管理,二个是提

  长性能。

二、用一个例子直观的来感受一下innodb_file_per_table的作用:

  创建两个表 t 和t2,在创建t表时innodb_file_per_table=OFF,在创建t2表时innodb_file_per_table=ON,观察两种情况下文件系统

  生成文件的不同

  二.1 第一步建表:

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec) mysql> create database tempdb; -- 为了测试专门建一个库
Query OK, 1 row affected (0.00 sec)
mysql> use tempdb; -- 进入库
Database changed
mysql> show global variables like 'innodb_file_per_table'; -- 察看当前设置
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+ mysql> set @@global.innodb_file_per_table=off; -- 关闭innodb_file_per_table
Query OK, 0 rows affected (0.00 sec)
mysql> create table t(x int , y int); -- 创建表t
Query OK, 0 rows affected (0.00 sec) mysql> set @@global.innodb_file_per_table=on; -- 打开innodb_file_per_table
Query OK, 0 rows affected (0.00 sec)
mysql> create table t2(x int,y int); -- 创建表t2
Query OK, 0 rows affected (0.01 sec)

  二.2 察看tempdb库中t,t2表所对应的文件:

[root@cstudio 5.7.]# ll tempdb/
总用量
-rw-r-----. mysql mysql 10月 : db.opt
-rw-r-----. mysql mysql 10月 : t2.frm
-rw-r-----. mysql mysql 10月 : t2.ibd
-rw-r-----. mysql mysql 10月 : t.frm

  

  由上面的内容可以看出t表少了一个ibd类型的文件,这个文件主要是用来保存innodb表中的数据的,所以对于t表来说数据就只

  保存在innodb系统表空间文件中了。

三、mysql 引用innodb_file_per_table是为了解决什么问题:

  在没有innodb_file_per_table之前所有的innodb表的数据都是统一保存到,innodb系统表空间文件中的,如果想让mysql的行为

  与innodb_file_per_table还没有引入时的行为一致,那么把innodb_file_per_table设置为OFF就行。

  1、由于数据都统一保存到innodb系统表空间文件中,在drop table ,truncate table后表空间文件并不会进行收缩,也就是说

  表空间文件所占的磁盘空间并不会因为drop table , truncate table 而释放。

  2、对于mysql来说alter table 的过程大概可以概括为 1)根据alter table 的指示创建出一张新的表 . 2)把老表的数据插入表新表中

  3)删了老表. 4)把新表的表名字重命名成老表的名字;当然如今的mysql已经有inplace对上面的过程进行优化了,不过并不是所有

  的alter table 都支持inplace,更多关于inplace的问题在此不表了。还是回到alter table 的第2)步 由这里可以看出系统表空间是

  要增大的(理由是:创建了新的表,又在向新的表中插入数据) 所以啊alter table 会导致系统表空间的进一步加大。

  3、在linux系统中不允许并行的对一个文件进行写入(innodb_flush_method=O_DIRECT的情况下是这样的),这可能成为一个性能

  问题

  4、对于使用innodb_file_per_table=ON的情况下,默认创建出来的ibd文件的格式是Barracuda,在这个文件格式下innodb数据行

  的格式就可以设置为compressed 或 dynamic 格式了。compressed 提供压缩功能节约空间,dynamic能优化对blob,text这样的

  数据类型的存储以提升性能。

----------------------------------------------------------------------

mysql-5.7 innodb_file_per_table 详解的更多相关文章

  1. mysql学习3:mysql之my.cnf详解

    mysql之my.cnf详解 本文转自:https://www.cnblogs.com/panwenbin-logs/p/8360703.html 以下是 my.cnf 配置文件参数解释: #*** ...

  2. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  3. PHP mysql与mysqli事务详解

    官方对PHP连接到MySQL数据库服务器的三种主要的API简介如下: http://php.net/manual/zh/mysqli.overview.php PHP mysql与mysqli事务详解 ...

  4. mysql配置文件my.cnf详解

    原文地址:mysql配置文件my.cnf详解 作者:gron basedir = path 使用给定目录作为根目录(安装目录). character-sets-dir = path 给出存放着字符集的 ...

  5. MySQL 执行计划explain详解

    MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但 ...

  6. mysql触发器trigger 实例详解

    mysql触发器trigger 实例详解 (转自 https://www.cnblogs.com/phpper/p/7587031.html)   MySQL好像从5.0.2版本就开始支持触发器的功能 ...

  7. MySQL复制相关参数详解

    MySQL复制相关参数详解 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.复制相关系统变量 1>.server_id 是必须设置在master和每个slave上的唯一标 ...

  8. MySQL权限授权认证详解

    MySQL权限授权认证详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL权限系统介绍1>.权限系统的作用是授予来自某个主机的某个用户可以查询.插入.修改.删除 ...

  9. Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(转)

    通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车,开始美好的旅程! 本篇是在SSM框架基础上进行的. 参考文章: 1.Quartz学习——Qua ...

  10. (转)Mysql 多表查询详解

    MySQL 多表查询详解 一.前言  二.示例 三.注意事项 一.前言  上篇讲到mysql中关键字执行的顺序,只涉及了一张表:实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1 多表连接有 ...

随机推荐

  1. (转)UnityVS(Visual Studio Tools For Unity)的安装与使用

    UnityVS(Visual Studio Tools For Unity)的安装与使用   一些废话 Unity 的开发者们,尤其是微软系的Unity开发者们,用Mono是不是烦死了?你是不是跟我一 ...

  2. java中boolean与字符串或者数字1和0的转换

    mysql有个字段是bit,只存储1和0,是二进制存储,那么在java的dao层如何映射成boolean呢 @Column(name="is_standard") private ...

  3. 把系统时间改到以前后,MyEclipse9.1的工程里的JS文件修改完保存但MyEclipse不会将其不会更新。

    一个任务中,由于本周数据还没有产生,只好把系统时间修改到上周,利用下上周的数据. 修改内容主要是增加查询子句的一个字段,因此,包含SQL的DAO,前台显示的Table和前台操作的JS都需要相应修改,它 ...

  4. AS3的反编译

    一个as3写的swf反编译,修改类库: http://www.swfwire.com/ http://www.swfwire.com/decompiler 基于此类库的swf反编译工具(air) ht ...

  5. 提高ASP.NET首页性能的十大方法

    本文是我对ASP.NET页面载入速度提高的一些做法,这些做法分为以下部分: http://www.cnblogs.com/xiachufeng/archive/2011/11/09/2242130.h ...

  6. TQ2440烧写方法总结

    USB烧写 接线:需要连接串口线.USB下载线和电源线. 软件:USB转串口驱动(因为现在的笔记本上一般都没有串口).USB下载驱动和DNW. 网络烧写 接线:需要连接串口线.网线和电源线. 软件:T ...

  7. LogUtils.java

    package com.xdsjs.save.utils; /** * 日志相关管理类 * Created by xdsjs on 2015/10/13. */ import android.util ...

  8. 使用轻量级JAVA 爬虫Gecco工具抓取新闻DEMO

    写在前面 最近看到Gecoo爬虫工具,感觉比较简单好用,所有写个DEMO测试一下,抓取网站 http://zj.zjol.com.cn/home.html,主要抓取新闻的标题和发布时间做为抓取测试对象 ...

  9. 深入理解 Linux 内存管理

    1. 内存地址 以Intel的中央处理器为例,Linux 32位的系统中.物理内存的基本单位是字节(Byte),1个字节有8个二进制位. 每一个内存地址指向一个字节,内存地址加1后得到下一个字节的地址 ...

  10. JS禁止后退键(backspace)使浏览器后退

    背景说明: 今天项目测试中,同事发现一个Bug,当键盘敲下后退键(Backspace)后,浏览器自动后退,不符合需求,故建议禁止浏览器后退键. 提出需求: 当键盘敲下后退键(Backspace)后 1 ...