zoukankan      html  css  js  c++  java
  • 存储引擎介绍

    一. 存储引擎介绍

    1. 什么是存储引擎

    存储引擎就是表的类型, 针对不同类型的表, mysql使用不同的存取机制

    img

    Copy现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用excel,处理图片用png等
    
    数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。
    
    存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方
    法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和
    操作此表的类型)
    

    拓展:

    Copy在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql
    数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据
    自己的需要编写自己的存储引擎
    
    SQL 解析器、SQL 优化器、缓冲池、存储引擎等组件在每个数据库中都存在,但不是每 个数据库都有这么多存储引擎。MySQL 的插件式存储引擎可以让存储引擎层的开发人员设 计他们希望的存储层,例如,有的应用需要满足事务的要求,有的应用则不需要对事务有这 么强的要求 ;有的希望数据能持久存储,有的只希望放在内存中,临时并快速地提供对数据 的查询。 
    

    2. MySQL四种主要存储引擎介绍

    Copy# InnoDB
    '''
    使用版本: MySQL5.5版本及之后默认的存储引擎
    优点: 支持事务, 行级锁定和外键约束对数据的安全性较	
    半个缺点: 访问速度没有MyISAM快, 但是我们更加注重的是数据的安全.
    
    每个InnoDB在磁盘上存储成2个文件,其中文件名和表名都相同,但是扩展名分别为:
        .frm(存储表结构)
        .idb(i -> index. 索引+数据组织表)
    '''
    
    # MyISAM
    '''
    使用版本: MySQL5.5版本之前默认的存储引擎
    优点: 访问速度要比Innodb更快
    缺点: 不支持事务,也不支持外键, 对事务完整性没有要求, 数据的安全性没有Innodb高.
    
    每个MyISAM在磁盘上存储成3个文件,其中文件名和表名都相同,但是扩展名分别为:
        .frm(存储表结构)
        .MYD(MyData,存储数据)
        .MYI(MyIndex,存储索引)
    '''
    
    # MEMORY
    '''
    优点: 采用内存存储, 访问数据可以得到最快的响应.
    缺点: 断电数据丢失. 或当mysqld守护进程崩溃时,所有的Memory数据也会丢失.
    
    每个MEMORY在磁盘上存储成1个文件,其中文件名和表名都相同,但是扩展名分别为:
        .frm(存储表结构)
    '''
    
    # BLACKHOLE
    '''
    特点: 无论存什么,都立刻消失(黑洞). 类似于回收站
    
    每个BLACKHOLE在磁盘上存储成1个文件,其中文件名和表名都相同,但是扩展名分别为:
        .frm(存储表结构)
    '''
     
    # MyISAM与InnoDB两个引擎的区别:           
    '''
    <1> InnoDB支持事务,MyISAM 不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要 哪个出错还可以回滚还原,而MyISAM就不可以了.
    <2> MyISAM适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应用.
    <3> InnoDB支持外键,MyISAM 不支持
    <4> InnoDB中不保存表的行数, InnoDB需要扫描一遍整个表来计算有多少行. MyISAM只要简单的读出保存好的行数即可。注意的是,当count()语句包含where条件时MyISAM也需要扫描整个表;
    <5> 对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引;
    <6> 清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表;
    <7> InnoDB支持行锁(注意: 某些情况下还是锁整表)
    '''
    

    3. 验证: 指定不同存储引擎进行插入数据测试

    Copy# 查看所有支持的存储引擎
    show engines;
    
    # 查看正在使用的存储引擎
    # storage  /ˈstɔːrɪdʒ/ 存储 储存 保管
    show variables like 'storage_engine%';
    Copydrop table innodb_t1;
    drop table myisam_t1;
    drop table memory_t1;
    drop table blackhole;
    
    # 创建不同的表指定不同的存储引擎
    create table innodb_t1(id int) engine=innodb;
    create table myisam_t1(id int) engine=myisam;
    create table memory_t1(id int) engine=memory;
    create table blackhole_t1(id int) engine=blackhole;
    
    # 插入数据
    insert into innodb_t1 values(1);
    insert into myisam_t1 values(1);
    insert into memory_t1 values(1);
    insert into blackhole_t1 values(1);
    
    # 查看
    select * from innodb_t1;
    select * from myisam_t1;
    select * from memory_t1;
    select * from blackhole_t1;
    
    # 结果
    '''
    mysql> select * from innodb_t1;
    +------+
    | id   |
    +------+
    |    1 |
    +------+
    1 row in set (0.07 sec)
    
    mysql> select * from myisam_t1;
    +------+
    | id   |
    +------+
    |    1 |
    +------+
    1 row in set (0.07 sec)
    
    mysql> select * from memory_t1;
    +------+
    | id   |
    +------+
    |    1 |
    +------+
    1 row in set (0.06 sec)
    
    mysql> select * from blackhole_t1;
    Empty set (0.07 sec)
    '''
    
    # 重启mysql或者重启机器后,表memory_t1内数据清空
    service mysql restart
    -- Shutting down MySQL..                                      [  OK  ]
    -- Starting MySQL.                                            [  OK  ]
    mysql> select * from memory_t1;
    -- Empty set (0.08 sec)
    
  • 相关阅读:
    linux下samba服务器的搭建(案列模拟)
    linux下nfs服务器的搭建
    linux 下 php+gd2+freetype+jpeg+png+zlib编译安装
    linux下xcache的安装
    wget如何设置代理
    实验记录:vsftp整合mysql-pam管理虚拟账号
    tr命令 实例
    sed学习笔记
    Byte、KB、MB、GB、TB、PB转换
    对lombbok @slf4j 进行测试用例
  • 原文地址:https://www.cnblogs.com/jkeykey/p/14457370.html
Copyright © 2011-2022 走看看