zoukankan      html  css  js  c++  java
  • 六、数据库存储引擎

    -- 查看名命令
    SHOW ENGINES;
    -- 查看当前的存储引擎
    SHOW VARIABLES LIKE '%storage_engine%'

    一、InnoDB存储引擎

    • 具有提交回滚崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级别。

    • InnoDB存储引擎为了在主内存中缓存数据和索引而维护它自己的缓冲池。InnoDB将它的表和索引存在一个逻辑表中,表空间可以包含数个文件

    • InnoDB支持外键完整性约束。创建表时,如果没有显形在表定义时指定主键,InnoDB会为每一行生成一个6B的ROWID并以此为主键

    • InnoDB不创建目录,使用InnoDB时,MySql将在MySQL数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件

    二、MyISAM存储引擎

    2.1、MyISAM的引擎特点

    • 不支持事务

    • 表级锁定

    • 读写相互阻塞

    • 只会缓存索引:

    • 读取速度快,占用资源相对少

    • 不支持外键约束,但是支持全文索引

    2.2、MyISAM引擎的适用的生产场景

    • 不需要支持事务的业务(例如转账,付款就不行)

    • 一般为读数据比较多的应用,读写都频繁则不合适,会堵塞,读多或者写多单一性都可以.

    • 读写并发访问较少的业务(单独读或者单独写高并发可以,同时读写并发不行)(主要是锁定 机制问题,其实锁定整个表,会有堵塞问题)

    • 数据修改相对较少的业务.

    • 对数据一致性要求不是非常高的业务.

    • 硬件资源较差的机器可以使用MyISAM,一般为中小型网站.

    2.3、MyISAM引擎调优精要

    • 设置合适的索引(缓存机制).

    • 调整读写优先级,根据实际需求确保重要操作更有限执行.

    • 启用延时插入(尽量批量插入,降低写的频率)

    • 尽量顺序操作,让insert数据都写入到尾部,减少阻塞.

    • 分解大的时间长的操作,降低单个操作的阻塞时间.

    • 降低并发数(减少对MySQL的访问),某些高并发的场景可以通过应用进行排队队列机制.

    • 对于静态(更改不频繁)的数据库数据,充分利用Query Cache或者memcached缓存服务极大可能的提高访问效率.

    • MyISAM的count只有在全表扫描的时候才是最高效的,带有条件的count都需要进行试机的数据访问

    • 也可以在做主从同步的时候主库使用InnoDB,从库使用MyISAM,进行读写分离(不推荐使用,数据迁移和升级比较麻烦)

    • 使用MyISAM引擎创建数据库,将生产3个文件。文件的名称以表的名字开始,扩展名支出文件类型:frm文件存储表定义,数据文件的扩展名为.MYD,索引文件的扩展名.MYI

    三、MyISAM和InnoDB对比

    对比项MyISAMInnoDB
    主外键 不支持 支持
    事务 不支持 支持
    行表锁 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 行锁,操作时只锁某一行,不对其他行影响,适合高并发
    缓存 只缓存索引,不缓存真实数据 不仅缓存索引,还缓存真实数据, 对内存要求极高,而且内存大小对性能有决定性影响。
    表空间
    关注点 性能 事务
    默认安装 Y Y

    四、存储引擎的选择

    • 如果要提供提交、回滚和崩溃恢复能力的事物安全能力,并要求实现并发控制,选择InnoDB。

    • 如果数据表主要用来插入和查询记录,则选择MyISAM。

    • 如果存放临时数据,数据量不大,且对数据安全性要求不高可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果。

    • 如果只有INSERT和SELECT操作,可以选择Archive引擎,Archive支持高并发的插入操作,但不是事物安全的,Archive适合存储归档数据如记录日志。

  • 相关阅读:
    Lucene in action 笔记 case study
    关于Restful Web Service的一些理解
    Lucene in action 笔记 analysis篇
    Lucene in action 笔记 index篇
    Lucene in action 笔记 term vector
    Lucene in action 笔记 search篇
    博客园开博记录
    数论(算法概述)
    DIV, IFRAME, Select, Span标签入门
    记一个较困难的SharePoint性能问题的分析和解决
  • 原文地址:https://www.cnblogs.com/jdy1022/p/14023696.html
Copyright © 2011-2022 走看看