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适合存储归档数据如记录日志。

  • 相关阅读:
    pyhton锁机制,进程池
    Python脚本运行出现语法错误:IndentationError:unexpected indent
    进程线程之间如何通信
    进程基础整理
    paramido简单使用教程
    python多继承简单方法
    常用模块整理-时间模块
    如何使用临时文件
    如何折分字符串技巧讨论-总结
    python中dump与dumps的区别
  • 原文地址:https://www.cnblogs.com/jdy1022/p/14023696.html
Copyright © 2011-2022 走看看