ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## InnoDB >* 默认事务型引擎,最重要最广泛的存储引擎,性能非常优秀 >* 数据存储在共享表空间,可以通过配置分开 >* 对主键查询对性能高于其他类型对存储引擎 >* * InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。 >* * InnoDB的数据文件本身就是索引文件。表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。 >* 内部做了很多优化,从磁盘读取数据时自动在内存构建`hash`索引,插入数据时自动构建插入缓冲区 >* 支持崩溃后的安全恢复 >* 支持行级锁:一定作用在索引上 > ``` >行锁也不是绝对的 >如果在执行一个SQL语句时MySQL不能确定要扫描的范围, >InnoDB表同样会锁全表, >例如update table set num=1 where name like "%aaa%" >``` >* 支持外键 ## MyISAM >* 5.1 版本前,MyISAM是默认的存储引擎 >* 拥有`全文索引` `压缩` `空间函数` >* 不支持 `事务` 和 `行级锁` 不支持崩溃后的安全恢复 >* 表存储在两个文件,MYD(数据)和MYI(索引) >* 设计简单,某些场景下性能很好 >* MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。 >* * MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。 InnoDB 和 MyISAM 对比 [MySQL存储引擎InnoDB与Myisam的六大区别](https://www.runoob.com/w3cnote/mysql-different-nnodb-myisam.html)。 ## 其他表引擎 `Archive` `Blackhole` `CSV` `Memory` >建议 优先使用 InnoDB表引擎,性能优秀