【十分钟刷八股文】MySQL引擎

135 阅读3分钟
  1. MyISAMInnoDB的区别

    存储引擎storageengineMySQL中的数据、索引以及其他对象是如何存储的,是一套文件系统的实现。

    常用的存储引擎有以下:

    Innodb引擎Innodb引擎提供了对数据库ACID事务的支持,并且还提供了行级锁和外键的约束,它的设计的目标就是处理大数据容量的数据库系统。

    MyIASM引擎(原MySQL默认引擎):不提供事物的支持也不支持行级锁和外键。

    MEMORY引擎:所有的数据都存在内存中,数据的处理速度快,但安全性不高。

    MyISAM和InnoDB的区别

    TypeMyISAMInnoDB
    存储结构每张表被存放在三个文件:frm — 表格定义、MYD(MyData)— 数据文件、MYI(MYIndex)—索引文件所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限与操作系统文件的大小,一般为2GB
    存储空间MyISAM可被压缩,存储空间较小InnoDB的表需要更多的内存和存储,他会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引
    可移植性、备份及恢复由于MyISAM的数据是以文件的形式存储,所以在跨平台的数据转移中会很方便,在备份和恢复时可单独针对某个表进行操作免费的方案可以是拷贝数据文件、备份binlog,或者用mysqldump,在数据量达到几十G的时候就相对痛苦了
    文件格式数据和索引是分别存储的,数据文件MYD,索引文件MYI数据和索引是集中存储的,都是.idb
    记录存储顺序按记录插入顺序保存按主键大小有序插入
    外键不支持支持
    事务不支持支持
    锁支持表级锁定行级锁定、表级锁定、锁定力度小并发能力高
    SELECTMyISAM更优
    INSERTUPDATEDELETEInnoDB更优
    select(*)MyISAM更快,因为MyISAM内部维护了一个计数器,可以直接调取
    索引的实现方式B+树索引,MyISAM是堆表B+树索引,InnoDB是索引组织表
    哈希索引不支持支持
    支持不支持
  2. MyISAM索引和InnoDB索引的区别

  • InnoDB索引是聚簇索引,MyISAM索引是非聚簇索引
  • InnoDB的主键索引的叶子节点存储着行数据,因此主键索引非常高效
  • MyISAM索引的叶子节点存储的是行数据地址,需要再次寻址才能得到数据
  • InnoDB非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效
  1. InnoDB引擎的四大特性
  • 插入缓冲(Inserbuffer)
  • 二次写(doublewrite)
  • 自适应哈希索引(ahi)
  • 预读(readhead)
  1. 存储引擎选择

    如果没有特别的需求,使用默认的InnoDB即可。

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

    InnoDB:更新(删除)操作评率也高,或者要保证数据完整性,并发高而且需要支持事务和外键,如OA自动化办公系统。

  2. 什么是索引

    索引是一种特殊的文件(InnoDB)数据表上的索引是表空间的一个组成部分,他们包含着对数据表里所有记录的引用指针。

    索引是一种数据结构,数据库索引是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据,索引的实现通常使用B+树及其变种。