mysql的存储引擎

一、什么是存储引擎

数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。

存储引擎这个概念似乎只有mysql有,存储引擎不同,mysql呈现出来的特性也不同,适用场景就不同。其他数据库,没有听说过有存储引擎这个概念。但应该也有类似的机制。比如oracle、sql server都有OLTP(联机事务处理)、OLAP(联机分析处理)两种类型,分别适用于业务系统应用,数据仓库,可在安装时进行选择。

二、mysql的常见存储引擎

mysql的存储引擎种类繁多,五花八门。像oracle、sql server的类型是在安装时候就要指定,之后不能再改。但mysql不同,它可以同时存在多种存储引擎,这个表用这种存储引擎,那个表用另一种,而且表的存储引擎还可以修改,问你死未。由于存储引擎涉及数据库不同的存储机制,表选择不同的存储引擎,可以得到不同的效果,如较高的性能,体现了灵活的一面。mysql确实是数据库界的一个异类,数据库中的战斗鸡。

mysql常用的存储引擎有以下几种:

1、innoDB
mysql默认的存储引擎。

最大特点是支持事务(难道支持事务不是数据库的标配吗?);支持外键(我去,难道不是标配吗?);它支持提交、回滚和紧急恢复功能来保护数据(竟无语凝噎)。它还支持行级锁定。当在多用户环境中使用时,它的“一致非锁定读取”提高了性能(就是共享锁吧?)。它将数据存储在集群索引中,从而减少了基于主键的查询的I/O。

可见,选择innoDB,让mysql看上去像一个正常的数据库。

使用MyISAM引擎创建数据库,将产生3个文件。文件的名字以表名字开始,扩展名之处文件类型:frm文件存储表定义、数据文件的扩展名为.MYD(MYData)、索引文件的扩展名时.MYI(MYIndex)

2、myISAM
该存储引擎管理非事务性表,提供高速存储和检索,支持全文搜索。

MyISAM基于ISAM存储引擎,并对其进行扩展。ISAM(Indexed Sequential Access Method,索引顺序存取方法)是1964年由BM提出的。类似多叉平衡树,总之就是利于查找。myISAM是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事务。

看上去,innoDB是mysql版的OLTP,而myISAM则是OLAP。

  1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提 交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;
  2. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;
  3. InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。 但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该
    过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,
    索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
  4. InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用 一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
  5. Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高;

3、Memory
mysql版的内存数据库。运行前将数据加载到内存,那必定是极快的了。但好像极少听说它,为啥大家不用它而抢着用Redis呢?估计是它有比较多的限制,比如不支持变长字段,都是定长字段;对表的大小也有要求,不能建立太大的表。突然断电数据就会消失,可靠性不如redis;速度不够redis快;使用比redis复杂;等等。

归根到底可能还是四不像吧。

在这里插入图片描述

三、查看mysql的存储引擎

SHOW ENGINES

如果要想查看数据库默认使用哪个引擎,可以通过使用命令:

SHOW VARIABLES LIKE 'storage_engine';

查看某个库下所有表使用的存储引擎

show table status from 库名;

在这里插入图片描述


查看某个库下指定表使用的存储引擎

show table status from 库名 where name='表名'

在这里插入图片描述

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...