# MyISAM存储引擎

MySQL 5.5以前默认MyISAM

-- 测试MyISAM存储引擎
CREATE TABLE test_myisam(
    a INT UNSIGNED,
    b VARCHAR(20),
    c CHAR(32)
)ENGINE=MyISAM;

默认MyISAM的表会在磁盘中产生3个文件:

  • .frm 表结构文件
  • .MYD 数据文件
  • .MYI 索引文件

可以在建表时指定数据文件和索引文件的存储位置,只有MyISAM表支持

DATA DIRECTORY [=] 数据保存的绝对路径
INDEX DIRECTORY [=] 索引文件保存的绝对路径

MyISAM单表最大支持的数据量2的64次方条记录

每个表最多可以建立64个索引

如果是复合索引,每个复合索引最多包含16个列,索引值最大长度是1000B

MyISAM引擎的额存储格式

  • 定长(FIXED 静态): 字段中不包含VARCHAR/TEXT/BLOB等

    CREATE TABLE myisam1(
        a CHAR(30),
        id INT
    )ENGINE=MyISAM;
    
    SHOW TABLE STATUS LIKE 'myisam_1'\G
    
    CREATE TABLE myisam3(
        a VARCHAR(30),
        id INT
    )ENGINE=MyISAM ROW_FORMAT=FIXED;
    
  • 动态(DYNAMIC): 字段中包含了VARCHAR/TEXT/BLOB等

  • 压缩(COMPRESSED)

# InnoDB存储引擎

MySQL 5.5以后默认引擎

设计遵循ACID模型,支持事务,具有从服务崩溃中恢复的能力,能够最大限度保护用户的数据

  • A: 原子性(Atomiocity)
  • C: 一致性(Consistency)
  • I: 隔离性Isolation)
  • D: 持久性(Durability)

支持行级锁,提升多用户并发时的读写性能

支持外键,保证数据的一致性和完整性

InnoDB拥有自己独立的缓存池,常用的数据和索引都在缓存中

对于INSERT、UPDATE、DELETE操作,InnoDB会使用一种change buffering的机制来自动优化,还可以提供一致性的读,并且还能够缓存变更的数据,减少磁盘IO,提高性能

CREATE TABLE tset_innodb(
    id INT UNSIGNED AUTO_INCREMENT KEY,
    username VARCHAR(20) NOT NULL
);

SHOW CREATE TABLE test_innodb;

创建InnoDB表之后会产生两个文件:

  • .frm 表结构文件
  • .ibd 数据和索引存储在表空间中

所有的表都需要创建主键,最好是配合上AUTO_INCREMENT,也可以放到经常查询的列作为主键

上次更新: 2/13/2025, 3:29:47 AM