MySQL数据库InnoDB与MyISAM区别

版权声明:可以转载,需注明出处 https://blog.csdn.net/wthfeng/article/details/87932732

数据库存储引擎区别

### InnoDB

特点: 行级锁,支持事务处理,支持外键,

行锁实现,根据索引条件检索数据使用行锁。

MyISAM

表锁,支持全文索引。

表锁,分为表共享锁和表独占锁。读和读之间使用共享锁,读写之间使用独占锁。

数据结构

B树,又称多路平衡查找树。所有节点中孩子节点的最大值为此树的阶(用m表示)。每个节点关键字的个数最少有[m/2-1]个,最多有[m-1]个。也即一个m为4的B树,子树节点最多有4个,每个节点关键字(数据)的至多有3个,至少有1个。

B树的数据都在非叶子节点。(所有叶子节点都在同一层次,且不带信息)

B+树,所有数据都在叶子节点。叶子节点有顺序访问指针。可以更好利用计算机的局部缓存原理(当一个数据被用到时,它后面的数据也会马上被用到)。

在实际应用中,度一般是挺大的,一般在100左右。h一般不大,不超过3。

而红黑树的深度一般是很大的,磁盘IO的次数会多。无法利用局部性原理。

而对比B树和B+树来说,B+树由于把数据都放到了叶子节点,每次IO可以获取更多节点,以及叶子节点的顺序访问指针,所以B+树比B树拥有更好新能。

MyISAM的索引结构

MyISAM的索引使用B+树实现,叶子节点记录数据的储存地址。主索引和辅助索引结构相同,区别在于主索引是唯一的,而辅助索引可以重复。查询过程为:先查询B+树查询索引,得到数据地址,再根据地址读取数据。这种索引方式称为非聚集索引

MyISAM要点: 索引文件上不记录数据,只有数据储存地址。MyISAM的索引文件和数据文件分离,查询上先查索引文件,再查数据文件。称为非聚集索引。

InnoDB索引结构

InnoDB中数据文件本身就是索引文件。索引也使用B+树实现,叶子节点储存数据。索引文件本身需要按主键构建(所以InnoDB需要必须有主键,没有指定会默认生成)。InnoDB的辅助索引底层储存的是主键的值。然后再根据主键的值去主键索引(也相当于数据文件)去查找相应的值。
InnoDB这样的聚集式索引会使得主键的检索十分高效。若使用辅助索引,需查询2遍索引。

最好不要使用过长的主键,因为辅助索引会引用主键值。主键最好是自增的,防止为维护B+树而频繁分裂调整树结构。

猜你喜欢

转载自blog.csdn.net/wthfeng/article/details/87932732