前言
我们之前讲了MySQL索引的底层数据结构,以及索引的失效原理等知识点。那么索引在硬盘上到底是怎么存储的呢?怎么通过索引定位查询出一条真实的数据呢?
MySQL两大引擎MyIsam
和InnoDB
他们的索引又有哪些不同点呢?
今天我们就来给大家揭晓一下
MyIsam 和 InnoDB常见区别
事务方面
InnoDB 支持事务,MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一。
外键方面
InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败。
索引层面
InnoDB 是聚集(聚簇)索引,MyISAM 是非聚集(非聚簇)索引。后面会重点讲解这两种索引的区别。
MyISAM支持 FULLTEXT类型的全文索引, InnoDB不支持FULLTEXT类型的全文索引,但是InnoDB可以使用sphinx插件支持全文索引,并且效果更好。
锁粒度方面
InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。
一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。
这也是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一。
硬盘存储结构
MyISAM
在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。
-
.frm
文件存储表的定义
。