当前位置 博文首页 > Monsterof的博客:Mysql数据库优化一(存储引擎)

    Monsterof的博客:Mysql数据库优化一(存储引擎)

    作者:[db:作者] 时间:2021-09-10 18:52

    前言

    数据库优化是一个老生常谈的问题,刚入门的小白或者工作N年的光头对这个问题应该都不陌生,你要面试一个中级工程师那么他就想"哥俩好"一样那么粘,面试官肯定会问这个问题,这篇文章我们就和它哥俩好!而且这个问题就是一个送分题,数据库的优化方案基本就是那些,答案也都是固定的,大家只要好好准备这个问题就不会住你,可以在面试中安排面试官,不然就被面试官安排!话不多说下边就针对数据库优化展开讲!

    相关文章

    Mysql数据库优化二(数据库设计)
    Mysql数据库优化三(SQL优化)

    存储引擎

    介绍

    数据库存储引擎是数据库底层组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。我们可以通过SHOW ENGINES
    在这里插入图片描述

    InnoDB存储引擎

    InnoDB越做越好从MySQL5.5版本之后,MySQL的默认内置存储引擎已经是InnoDB,主要特点有

    • 容灾恢复性比较好
    • 支持事务,默认事务隔离界别为可重复读
    • 使用的锁粒度为行锁,可以支持更高的并发
    • 支持外键
    • 配合一些热备工具可以支持在线热备份
    • 在InnoDB中存在着缓冲管理,通过缓冲池,将索引和数据全部缓存起来,加快查询的速度
    • 对于InnoDB类型的表,其数据的物理组织形式是聚簇表。所有的数据按照主键来组织。根据主键进行排序,数据和索引放在一块,都位于B+数的叶子节点上

    MyISAM存储引擎

    MyISAM引擎是MySQL关系数据库系统的默认储存引擎(mysql 5.5.5之前)。这种MySQL表存储结构从旧的ISAM代码扩展出许多有用的功能。在新版本的Mysql中,Innodb引擎由于其对事务参照完整性,以及更高的并发性等优点开始逐步取代Myisam引擎。

    • 不支持事务
    • 表级锁定
    • 读写互相阻塞:不仅会在写入的时候阻塞读取,myisam还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读。
    • 只会缓存索引:myisam可以通过key_buffer_size缓存索引,以大大提高访问性能,减少产品IO,但是这个缓存区只会缓存索引,而不会缓存数据。
    • 读取速度较快,占用资源相对少
    • 不支持外键约束,但支持全文索引

    MEMORY存储引擎

    MEMORY是MySQL中一类特殊的存储引擎。它使用存储在内存中的内容来创建表,而且数据全部放在内存中。这些特性与前面的两个很不同。

    • 支持 HASH 索引和 BTree 索引( MyISAM 与 InnoDB 只支持 BTree 索引)
    • 所有字段都为固定长度 varchar(10)=char(10)
    • 不支持 BLOB 和 TEXT 等大字段,因为它的数据是存储在内存当中,不宜过大
    • Memory 存储引擎使用 表级锁

    ARCHIVE存储引擎

    ARCHIVE存储引擎适合的场景有限,由于其支持压缩,故主要是用来做日志,流水等数据的归档,主要特点有

    • 支持Zlib压缩,数据在插入表之前,会先被压缩
    • 仅支持SELECT和INSERT操作,存入的数据就只能查询,不能做修改和删除;
    • 只支持自增键上的索引,不支持其他索引

    CSV存储引擎

    数据中转试用,主要特点有

    • 其数据格式为.csv格式的文本,可以直接编辑保存
    • 导入导出比较方便,可以将某个表中的数据直接导出为csv,试用Excel办公软件打开

    选择依据

    如果没有特殊需求默认使用InnoDB引擎即可

    MyISAM:以读写插入为主的应用程序,比如博客系统、新闻门户网站。

    Innodb:更新(删除)操作频率也高,或者要保证数据的完整性;并发量高,支持事务和外键保证数据完整性。比如OA自动化办公系统

    另外推荐小伙伴们积极参加:C站测评挑战赛

    cs