MySQL引擎

MySQL提供多种存储引擎,通过命令 show engines;   查看

查看当前默认的存储引擎  show variables like '%storage_engine%';

查看某个表用了什么引擎  show create table 表名;

 

MyISAM引擎:

没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT或UPDATE数据时即写操作需要锁定整个表。存储了表的行数,SELECT COUNT(*) FROM TABLE时,只需要直接读取已经保存好的值而不需要进行全表扫描,如果表的读操作远远多于写操作且不需要事务支持,那么MyISAM是个好选择。

 

InnoDB引擎:

InnoDB是MySQL默认的引擎,提供对ACID事务的支持,并且实现SQL标准的四种隔离级别,提供行级锁和外键约束,它的设计目的是处理大容量数据库系统,在运行时,Innodb会在内存建立缓冲池,用于缓冲数据和索引。没有保存表的行数,当SELECT COUNT(*) FROM TABLE时,需要扫描全表。使用行级锁不是一定的,如果一个SQL语句不能确定要扫描的范围,InnoDB表同样会锁全表。

 

MyISAM引擎索引实现

B+树作为索引结构,叶节点的data域存放的是数据记录的地址。

主键索引原理图:

 辅助索引:

 

InnoDB引擎索引实现

同样使用B+树作为索引结构。MyISAM索引文件和数据是分离的,索引文件仅保存数据记录的地址,而在InnoDB中,表数据文件本身就是按照B+树组织的一个索引结构,叶节点data域保存完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。

 

主键索引:

 

 辅助索引:

 

InnoDB索引和MyISAM索引的区别:

1.主索引的区别,InnoDB的数据文件本身就是索引文件,而MyISAM的索引和数据是分开的。

2.辅助索引的区别,InnoDB的辅助索引data域存储相应记录主键的值而不是地址,而MyISAM的辅助索引与主索引没有多大的区别。

posted @ 2016-09-04 20:02  没有梦想的小灰灰  阅读(140)  评论(0编辑  收藏  举报