mysql默认引擎为innoDB的原因
Posted 本站大佬
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql默认引擎为innoDB的原因相关的知识,希望对你有一定的参考价值。
mysql数据库5.5版本之前默认引擎为MyISAM,之后修改为innodb(包括5.5版本)。
myISAM与innoDB的特点:
1、MyISAM
特点:不支持事务,不支持外键;支持表锁,不支持行锁,访问速度快
文件:一张表对应三个文件,分别是xxx.sdi(存储表结构信息),xxx.MYD(存储数据),xxx.MYI(存储索引)
2、innoDB
特点:DML操作遵循ACID模型,支持事务(事务四大特性:原子性,一致性,持久性,隔离性);支持行级锁,可以提高并发访问量;支持外键FOREIGN KEY约束,保证数据的完整性和正确性。
保存的文件:xxx.ibd:xxx是表名,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm:创建表的语句,sdi)、数据和索引(使用指令 ibd2sdi xxx.ibd可以查看xxx.ibd的内容。)。
参数:innodb_file_per_table
逻辑存储结构:TableSpace(表空间)、Segment(段)、Extent(区,固定大小为1M)、Page(页,是磁盘操作的最小单元,大小是固定的16K,一个区可以存储64个页)、Row(行)。
MyISAM与innoDB的区别:
InnoDB支持外键和事务,MyISAM不支持外键和事务 对于InnoDB每一条SQL语句都默认封装成事务,自带提交。
InnoDB是聚集索引,MyISAM是非聚集索引。 InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键(innoDB必定会有主键,如果自己不创建主键的话,引擎会使用一个名为DB_ROW_ID的隐藏字段),通过主键索引效率很高。但是辅助索引需要两次查询(如果没有聚焦索引的话会进行回表操作),先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大(主键尽量采用自增字段,尽量降低主键长度,插入数据时,尽量选择顺序插入,可以选择使用AUTO_INCREMENT自增主键,业务操作时,避免对主键的修改),其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描(count(主键),count(字段),count(1),count(星号))。
count优化
而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
InnoDB不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高
聚集索引:聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。一个表只能有一个聚集索引,因为一个表的物理顺序只有一种情况,所以,对应的聚集索引只能有一个。聚集索引的叶子节点就是数据节点,既可以存储索引值,又可以存储聚集索引中的字段。
以上是关于mysql默认引擎为innoDB的原因的主要内容,如果未能解决你的问题,请参考以下文章