zoukankan      html  css  js  c++  java
  • mysql innodb 存储引擎


    --MySQL 结构有两部分组成
    1.MySQL server 层
    2.存储引擎层

    --注:到 存储引擎层之前都属于 MySQL server 层

    MySQL 5.1到 5.7 ,大版本 没有变化 ,小版本 唯一的变化就是 存储引擎 ,MySQL server 层没有变过

    在 MySQL 5.5之后 包括 5.5 ,默认的存储引擎都是 innodb (engine=innodb) ,但是 在 5.5之前的版本,默认的存储引擎是 myisam ,基于表的
    所以 如果是 5.5之前的版本,创建表的时候 需要指定 engine=innodb ,否则创建出来的表 都是 myisam 存储引擎的
    基本上 5.1之后就是 5.5了;期间都是一个跳板

    MySQL组成部分:
    1.连接池组件
    2.管理服务和工具组件
    3.SQL接口组件
    4.查询分析器组件
    5.优化器组件
    6.缓冲组件
    7.插件式存储引擎
    8.物理文件

    存储引擎是基于表的,不是基于数据库的

    mysql 的核心就是存储引擎

          MySQL 表存储引擎

    MySQL 插拔式的存储引擎架构提供了一系列标准的管理和服务支持
    存储引擎是基于表的,而不是基于数据库的
    根据具体的应用选择合适的存储引擎

    OLTP:在线联机事物系统,---读多写少,比如:电商,支持行级锁,支持外键
    OLAP:在线联机分析系统,---这个接触的几率很小

          各类存储引擎介绍

    一、innodb 存储引擎
    1.支持事务,面向在线事务处理(OLTP)方面应用,支持行级锁,支持外键
    2.通过多版本并发控制MVCC来获得高并发性,并且实现了sql标准的四种隔离级别(默认 repeatable)
    3.提供插入缓冲(insert buffer),二次写(double write) ,自适应哈希索引(ahi),预读(read ahead)
    4.对于表中的数据的存储,innodb 采用 clustered ;每张表的存储都按照主键的顺序存放,如果没有显示的为表定义主键,
    innodb 会为每一张行生产一个6字节的rowid,作为主键

    1>支持事务,行级锁,支持外键
    2>多版本并发控制(mvcc)来获得高并发性
    3>sql 标准的四种隔离级别:可重复读、不可重复读、串行读、脏读
    4>innodb 三大特性:insert buffer ,double write ,ahi
    5>一定要为每一张新建的表指定主键,不要让系统自动创建

    二、 Myisam 存储引擎

    1.不支持事务,表锁,全文索引,对OLAP在线分析处理,操作速度快
    2. Myisam 存储引擎表由 MYD 和 MYI 组成,myd用来存放数据文件,myi 用来存放索引文件
    3.从 MySQL 5.0开始 MySQL默认支持 256T 单表数据
    4.对于 Myisam 存储引擎表,MySQL数据库只缓存其索引文件,数据文件的缓存交由操作系统本身来完成,区别于使用LUR算法缓存数据的大部分数据库

    1>不支持事务,表级锁,全文索引,对OLAP 在线分析系统,操作速度快
    2>MYD 存放数据文件,MYI 存放索引文件
    3>从 MySQL5.0 开始,MySQL 默认支持 256T单表数据
    4>对于 myisam 存储引擎表,MySQL数据库只缓存其索引文件,数据文件的缓存交由操作系统本身来完成,区别于使用LUR算法缓存数据的大部分数据库

    三、NDB 存储引擎
    1.数据全部放在内存中,因此主键查找的速度极快,可以线性提高数据库性能,高可用,高性能集群系统
    2.NDB的存储引擎的连接操作是在MySQL数据库层完成,而不是在存储引擎层完成,因此复杂的连接操作需要巨大的网络开销

    MySQL cluster 采用的就是NDB 存储引擎,跳过存储引擎,直接调用数据,这个就是不选择MySQL cluster的原因(电商不会使用)

    四、memory存储引擎
    1.将表中的数据存放在内存,如果数据库重启或者发生崩溃,表中的数据全部丢失;适用于存储临时数据临时表,数据仓库中的维度表,
    默认使用 hash 索引不是 B树索引

    2.只支持表锁,并发性能差,不支持text和blob类型,存储变长字段varchar时,是按照定常字段char方式进行,浪费内存空间

    --注:理解位一张内存表,一张临时表;并发性能差,会浪费内存空间

    五、archive存储引擎,只支持insert和select查询;

    六、federated存储引擎,不存放数据,只是指向一台远程MySQL数据库服务器上的表

    七、maria存储引擎,缓存数据和索引文件,行锁,提供MVCC功能,支持事务和非事务安全的选项支持,
    以及更好的BLOB字符类型处理性能

    maria存储引擎,是mariadb 默认的存储引擎,和innodb 是一样的,MVCC(多版本并发控制)

    ---总结
    innodb 三大特性:
    插入缓冲(insert buffer);二次写(double write);自适应哈希索引(ahi)

    clustered 聚集存储

    在生产环境中,新建表必须指定创建主键,否则系统会生成 UID ,消耗系统性能

    innodb的并发性强,因为有行级锁

    myisam: MYD 存储数据文件; MYI 索引文件,只缓存索引 ,数据文件还是在磁盘上
    innodb: ibd 所有的文件是放在一起的,数据和索引都缓存,所以innodb速度快


    [root@rc-mysql mysql]# ll user.*
    -rw-rw---- 1 mysql mysql 10684 Apr 28 2016 user.frm
    -rw-rw---- 1 mysql mysql 7500 May 22 16:44 user.MYD
    -rw-rw---- 1 mysql mysql 4096 May 22 16:44 user.MYI

    frm 是表结构,在innodb和myisam 都是这个后缀
    MYD Myisam 存储引擎的数据文件
    MYI Myisam 存储因为的索引文件
    innodb 存储引擎的后缀名 ibd ,数据和索引在一个文件里面
    innodb表 数据就是索引,索引就是数据


    ---总结:
    innodb和myisam 的区别
    1.事务(innodb 支持,myisam 不支持)
    2.锁粒度(innodb 行级锁 ,myisam表级锁 )
    3.并发(innodb 支持多版本并发控制-MVCC ,获得高并发)
    4.缓存文件(innodb 缓存数据和索引,myisam 只缓存索引,不缓存数据)
    5.文件名后缀(innodb : ibd;myisam MYD MYI )
    6.5.6以后包括5.6 都支持全文索引,但是不支持中文的(innodb 在 5.6 以前不支持全文索引)
    ----在5.5包括5.5,默认存储引擎都是innodb
    ----(engine=innodb),但是5.5之前的版本,存储引擎都是 myisam ,基于表的
    7.innodb 执行 delete 的时候 是一行一行删除,因为有行级锁,并且不会将表删除
    myisam 是删除整张表,然后在重新创建表结构一样的表
    8.select count(*);
    myisam 比 innodb 快,因为里面有一个计数器,当有数据进入的时候,计数器会进行统计而innodb 需要对表进行一次全表扫描

    ----问题点
    1.MySQL不支持全文索引?
    5.6开始支持全文索引,但是只能查询非中文的
    2.MySQL快是因为不支持事务?
    innodb 支持事务
    3.当表大于一千万的时候,MySQL性能会急剧下降?
    是;但是可以不让一张表大于一千万,分表;
    或者涉及架构,比如百度架构(代理方式)

  • 相关阅读:
    后端架构师技术图谱
    互联网经典技术架构
    软件开发知识体系(二)
    软件开发知识体系(一)
    HSF源码剖析
    分库分表的几种常见形式以及可能遇到的难题
    iOS 关于MVC和MVVM设计模式的那些事
    MVC与MVP简单对比
    MVC、MVP、MVVM 模式
    Learning Android ActionBar
  • 原文地址:https://www.cnblogs.com/ss-33/p/11237897.html
Copyright © 2011-2022 走看看