zoukankan      html  css  js  c++  java
  • Innodb简介

    Innodb是事务性引擎,它被设计用于处理大量的短期事务,短期事务大部分是正常提交,很少有回滚的情况。
    Innodb将数据和索引放在单独的文件中。
    Innodb的数据存储在表空间中。
    Innodb采用MVCC来支持高并发,并且实现了四个标准的隔离级别
    默认隔离级别为repeatable read可重复读,通过间隙锁(next-key lock)策略防止幻读的出现
    间隙锁使得Innodb不仅仅锁定查询涉及的行,还会对索引中的间隙进行锁定,以防止幻读行的插入。
     
    Innodb表是使用聚簇索引建立的;
    聚簇索引对主键查询有很高的性能
    不过二级索引(非主键索引)中必须包含主键列,所以如果主键列很大的话,其他的所有索引都很大。因此如果表中索引较多的话,主键应该尽可能小。
     
    Innodb内存做了优化,包括从磁盘读取数据时采用的可预测性读取,能够自动在内存中创建hash索引以加速读操作的自适应哈希索引,以及能够加快插入操作的插入缓冲区等。
    1、最大与最小值
    一个表最多可以包含1017列
    一个表最多可包含64个二级索引
    多列索引最多允许16列
    默认页面大小InnoDB为16KB
    最大表空间大小也是表的最大大小。
    表14.6 InnoDB最大表空间大小
    InnoDB页面大小
    最大表空间大小
    4KB
    16TB
    8KB
    32TB
    16KB
    64TB
    32KB
    128TB
    64KB
    256TB
    2、Innodb表的限制
    SHOW TABLE STATUS
    InnoDB 除了表格保留的物理尺寸外,没有给出表格的准确统计数据。行计数只是SQL优化中使用的粗略估计
    InnoDB不保留表中的内部行数,因为并发事务可能同时 “ 看到 ”不同数量的行。因此,SELECT COUNT(*) 语句只计算当前事务可见的行。
    count(列):返回语句检索的行中非NULL 值数的计数。
    COUNT(*)有点不同,它返回检索的行数的计数,无论它们是否包含 NULL值。
     InnoDB存储精确的行数是有问题的。多个交易可能同时发生,每个交易都可能影响计数。
    InnoDB不保留表中的内部行数,因为并发事务可能同时 “ 看到 ”不同数量的行。因此,SELECT COUNT(*) 语句只计算当前事务可见的行。
    InnoDB 以相同的方式处理SELECT COUNT(*)SELECT COUNT(1)操作。没有性能差异
    当AUTO_INCREMENT整数列用完值时,后续INSERT 操作将返回重复键错误
    DELETE FROM tbl_name 不会重新生成表,而是逐个删除所有行
    3、锁定与事务
    如果innodb_table_locks=1(默认),锁表时需要获得两个锁。
    除了在Mysql层上的表锁外,它也获得Innodb表锁。
     
    Innodb事务提交或者终止时,将释放事务持有的所有锁。
    在autocommit=1模式下调用InnoDB表上的锁表没有多大意义,因为获得的InnoDB表锁将立即释放。
    您无法在事务中锁定其他表,因为LOCK TABLES执行隐式 COMMIT和 UNLOCK TABLES。
    4、Innodb冗余行特定
    每个索引记录包含一个6字节的头。头用于将连续记录链接在一起,也用于行级锁定。
    聚簇索引中的记录包含所有用户定义列的字段。此外,还有一个6字节的事务ID字段和一个7字节的滚动指针字段。
    如果没有为表定义主键,则每个聚簇索引记录还包含一个6字节的行ID字段。
    每个辅助索引记录还包含为聚簇索引键定义的所有主键字段,这些字段不在辅助索引中。
    在内部,InnoDB存储固定长度的字符列,例如 CHAR(10)固定长度格式。InnoDB不会截断VARCHAR列的尾随空格 。
    收藏文章数量从多到少与“把书读薄”是一个道理
  • 相关阅读:
    分布式文件存储系统-HDFS
    Java中的常用类
    分布式协调框架ZooKeeper
    【Redis】Redis慢查询
    kubectl工具管理应用
    kubectl命令管理
    To check your hdfs port use the following command in linux
    hadoop HDFS常用文件操作命令
    在scala中关于split以及正则表达式
    pandas入门之Series
  • 原文地址:https://www.cnblogs.com/use-D/p/9563249.html
Copyright © 2011-2022 走看看