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性能会急剧下降?
    是;但是可以不让一张表大于一千万,分表;
    或者涉及架构,比如百度架构(代理方式)

  • 相关阅读:
    gThumb 3.1.2 发布,支持 WebP 图像
    航空例行天气预报解析 metaf2xml
    Baruwa 1.1.2 发布,邮件监控系统
    Bisect 1.3 发布,Caml 代码覆盖测试
    MoonScript 0.2.2 发布,基于 Lua 的脚本语言
    Varnish 入门
    快速增量备份程序 DeltaCopy
    恢复模糊的图像 SmartDeblur
    Cairo 1.12.8 发布,向量图形会图库
    iText 5.3.4 发布,Java 的 PDF 开发包
  • 原文地址:https://www.cnblogs.com/ss-33/p/11237897.html
Copyright © 2011-2022 走看看