MySQL存储引擎

MySQL存储引擎:

表类型:
    CREATE TABLE ... ENGINE=

InnoDB:
    处理大量的短期事务;
    数据存储于“表空间(table space)”中;
        (1) 所有InnoDB表的数据和索引放置于同一个表空间中;
            表空间文件:datadir定义的目录下
                数据文件:ibddata1, ibddata2, ...
        (2) 每个表单独使用一个表空间存储表的数据和索引;
            innodb_file_per_table=ON     #每表使用单独的表空间,用来存储数据,实现高级功能,实现单表备份
            mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_file_%';
            +--------------------------+----------+
            | Variable_name            | Value    |
            +--------------------------+----------+
            | innodb_file_format       | Antelope |
            | innodb_file_format_check | ON       |
            | innodb_file_format_max   | Antelope |
            | innodb_file_per_table    | ON       |
            +--------------------------+----------+
            4 rows in set (0.01 sec)

            数据文件(存储数据和索引):tbl_name.ibd, 
            表格式定义文件:tbl_name.frm

    基于MVCC来支持高并发,支持所有的四个隔离级别,默认级别为REPEATABLE READ; 间隙锁防止幻读;
    innodb表使用聚集索引
    innodb支持“自适应hash索引”
    锁粒度:行级锁

    MariaDB (XtraDB (percona))

    数据存储:表空间
    并发:MVCC, 间隙锁
    索引:聚集索引、辅助索引
    性能:预计操作、自适应hash、插入缓存区
    备份:支持热备(xtrabacup)

MyISAM:
    支持全文索引(FULLTEXT index)、压缩、空间函数(GIS); 但不支持事务,且为表级锁;
    崩溃后无法安全恢复

    适用场景:只读(或者写较少)、表较小(可以接受长时间进行修复操作)
        Aria:crash-safe

    文件:
        tbl_name.frm: 表格式定义
        tbl_name.MYD: 数据文件
        tbl_name.MYI: 索引文件

    特性:
        加锁和并发:表级锁
        修复:手工或自动修复、但可能丢失数据
        索引:非聚集索引
        延迟更新索引键:
        压缩表

    行格式:dynamic, fixed, compressed, compact, redundent

其它的存储引擎:
    CSV:将普通的CSV(字段通过逗号分隔)作为MySQL表使用;
    MRG_MYISAM:将多个MyISAM表合并成为一个虚拟表;
    BLACKHOLE:类似于/dev/null,不真正存储任何数据;
    MEMORY:所有数据都保存于内存中,内存表;支持hash索引;表级锁;
        临时表
    PERFORMANCE_SCHEMA:伪存储引擎;
    ARCHIVE:只支持SELECT和INSERT操作;支持行级锁和专用缓存区;
    FEDERATED:用于访问其它远程MySQL服务器一个代理,它通过创建一个到远程MySQL服务器的客户端连接,并将查询传输到远程服务器执行,而后完成数据存取;
        在MariaDB的上实现是FederatedX

    MariaDB支持的其它存储引擎:
        OQGraph
        SphinxSE
        TokuDB
        Cassandra
        CONNECT
        SQUENCE

并发控制:
    锁:
        读锁:共享锁
        写锁:独占锁

    锁粒度:
        表级锁
        行级锁

        锁策略:在锁粒度及数据安全性寻求的平衡机制;
            每种存储引擎都可以自行实现其锁策略和锁粒度;
            MySQL在服务器级也实现了锁,表级锁;用户可显式请求;
                (1) LOCK TABLES
                    tbl_name [[AS] alias] lock_type
                    [, tbl_name [[AS] alias] lock_type] ...
            mysql> LOCK TABLES students WRITE;

                lock_type:
                    READ [LOCAL]
                  | [LOW_PRIORITY] WRITE

                    UNLOCK TABLES
            mysql> UNLOCK TABLES;       

                (2) FLUSH TABLES tb_name[,...] [WITH READ LOCK] [FOR UPDATE]

                (3) SELECT clase [FOR UPDATE] [WITH READ LOACK]

    分类:
        隐式锁:由存储引擎自动施加锁;
        显式锁:

转载于:https://blog.51cto.com/zhanx/2350256

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值