zoukankan      html  css  js  c++  java
  • 14.2.5.7 Physical Row Structure 物理数据结构:

    14.2.5.7 Physical Row Structure 物理数据结构:
    
    InnoDB物理记录结构依赖行格式 在表创建的时候,  默认, InnoDB 使用Antelope 文件存储格式和它的压缩行格式。
    
    冗余的格式是保留 和MySQL 老版本的兼容性。
    
    
    当你启用 innodb_file_per_table设置,你也可以使用更新的Barracuda file format,
    
    
    它的DYNAMIC 和COMPRESSED 行模式.
    
    检查InnoDB 表的行格式,你可以使用SHOW TABLE STATUS,比如:
    
    
    mysql> SHOW TABLE STATUS IN test1G
    *************************** 1. row ***************************
               Name: t1
             Engine: InnoDB
            Version: 10
         Row_format: Compact
               Rows: 0
     Avg_row_length: 0
        Data_length: 16384
    Max_data_length: 0
       Index_length: 16384
          Data_free: 0
     Auto_increment: 1
        Create_time: 2014-10-31 16:02:01
        Update_time: NULL
         Check_time: NULL
          Collation: latin1_swedish_ci
           Checksum: NULL
     Create_options: 
            Comment:
    
    
    
    你可以检查row format 通过查询INFORMATION_SCHEMA.INNODB_SYS_TABLES.
    
    COMPACT row 格式降低了20% 的row storage space 代价是增加CPU使用对于一些操作。
    
    
    如果你的工作负载是一个典型的受限于cache命中率和disk speed.
    
    
    COMPACT 格式是可能更快的, 如果 负载是受限于 CPU 速度,COMPACT 格式可能会更慢。
    
    
    Rows 在InnoDB 表使用冗余的行格式有下面的特点:
    
    1.每个index 记录包含一个6位的头, header 是用于连接连续的记录,也还row-level 锁定
    
    2. 在clustered index 中的记录包含字段用于所有用户自定义的列,此外,
    
    
    有一个6字节的事务ID 字段和7字节的指针字段。
    
    
    3. 如果表上没有主键,每个clustered index record包含一个8字节的row ID 子弹
    
    4.每个secondary index record 包含所有的主键列,定义为 clustered index key 而不是secondary index
    
    
    5.一个记录包含一个指针到每个记录的字段,如果字段的总长度在一个记录里是小于128字节,
    
    
    指针是一个字节,否则, 是2个字节。这些指针的数组被称为记录目录, 这些指针指向的区域称为数据部分
    
    6. 内部的,InnoDB 存储固定长度的字符列 比如CHAR(10) 在一个固定长度的格式,
    
    
    InnoDB 不截取VARCHAE 列两侧的空格。
    
    
    7.一个SQL NULL 值保留一个或者2个字节在record directory. 除此之外,
    
    
    一个SQL NULL 值储备0个字节在记录的数据部分 如果存储在一个可变的列里。
    
    在一个固定列,它保留固定列的长度在数据部分.
    
    
    
    在InnoDB 表的记录使用COMPACT 行格式有下面的特点:
    
    
    1. 每个index 记录包含一个5字节header ,header 是用于连接连续的记录,也是在行级锁定。
    
    2.记录header的可变长度部分包含一个位向量来表明NULL列。
    
    如果索引中的列数可以是NULL 是N, 位向量占据上限(N/8) 字符。(举个例子,如果在任何地方从9到15列 可以是NULL,
    
    位向量使用2个字节)
    
    列是NULL 不会占用space 。
    
    3. 记录header 后面跟着非空列的数据内容
    
    
    4.记录在clustered index 包含字段对于所用用户定义的列,此外,有一个6字节的事务ID字段和一个7字节的指针字段
    
    5.如果表上没有主键定义,每个clustered index记录也包含一个6字节的row ID字段
    
    
    6.每个secondary index record 也包含所有的主键列定义用于 clustered index key 而 不是secondary index.
    
    
    如果那些主键列字段是可变长度,record header 对于每个secondary index 会有一个可变长度部分来记录它们的长度,
    
    即使secondary index 是定义在一个固定长度列
    

  • 相关阅读:
    实现继承的几种方式
    使用 + 操作符、parseInt 、 parseFloat等方法处理数字字符串时的不同
    jQuery插件版无缝轮播,重写了之前的代码,显得更高大上一点
    我是如何从零开始构建一个jsp项目的
    css居中方法详解
    嫌innerHTML性能不够好,推荐几个新方法
    初学事件委托
    Set集合——HashSet、TreeSet、LinkedHashSet(2015年07月06日)
    十大Intellij IDEA快捷键(转)(2015年06月15日)
    IntelliJ IDEA 集成Tomcat后找不到HttpServlet问题(2015年06月13日)
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/6199886.html
Copyright © 2011-2022 走看看