1.常见的存储引擎,以及他们的区别

常见的存储引擎有三种:InnoDB引擎、MyISAM引擎、MEMORY引擎

  • InnoDB引擎

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

  • MyISAM引擎(原本为mysql的默认引擎)

    不提供事务的支持,也不支持行级锁和外键。

  • MEMORY引擎

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

1.1.MyISAM与InnoDB的区别

  • 1、存储结构
    • MyISAM引擎当中的每张表存放在三个文件中:frm-表定义、MYD(MY Data)-数据文件、MYI(MY Index)-索引文件
    • InnoDB引擎当中所有表都保存在同一个ibd数据文件中,大小只受限于操作系统文件的大小,一般为2GB
  • 2、存储空间
    • MyISAM可被压缩,存储空间较小
    • InnoDB的表需要更多的内存和存储, 它会在主内存中建立其专用的缓冲池,用于高速缓冲数据和索引
  • 3、可移植性、备份及恢复
    • 由于 MyISAM 的数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作
    • InnoDB表备份免费的方案可以是拷贝数据 文件、备份 binlog, 或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了
  • 4、外键和事务
    • MyISAM不支持外键和事务
    • InnoDB支持外键和事务
  • 5、锁支持(锁是避免资源争用的一个机制, MySQL锁对用户几乎是透明的)
    • MyISAM是表锁
    • InnoDB支持行级锁,表锁等,锁的粒度更小,并发效率更好
  • 6、查询语句
    • 查询语句MySAM更优,插入,修改,删除语句InnoDB语句更优
  • 7、索引

    • InnoDB索引是聚簇索引,MyISAM索引是非聚簇索引。
    • InnoDB的主键索引的叶子节点存储着行数据,因此主键索引非常高效。 MyISAM索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据。
    • InnoDB非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效。

      2.InnoDB引擎的4大特性

  • 插入缓冲(insert buffer)

  • 二次写(double write)
  • 自适应哈希索引(ahi)
  • 预读(read ahead)

    3.存储引擎选择

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

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

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