二、mysql存储引擎之InnoDB

一、存储引擎简介

mysql采用业务逻辑和数据存储分离的架构,底层的存储引擎为上层的SQL层提供了支持;mysql采用的是插件的方式将存储引擎直接加载到正在运行的MySQL中,这是mysql的一个重要特性;

以下命令可以查询当前mysql支持的存储引擎:

show engines;

本文环境:

1)mysql版本为:5.7.18

2)系统: mac os

存储引擎9种:

除了FEDERATED以外的8种都是支持的,默认是InnoDB;

二、InnoDB特点

1)存储限制:64TB

2)事务安全:支持

3)锁机制:行级锁

4)B-tree索引:支持

5)哈希索引:不支持

6)全文索引:不支持

7)集群索引:支持

8)数据缓存:支持

9)索引缓存:支持

10)数据可压缩:不支持

11)空间使用:高

12)内存使用:高

13)批量插入速度:低

14)支持外键:支持

三、InnoDB主要特点介绍

InnoDB存储引擎是第三方公司开发的,目前应用最广泛的数据库存储引擎除了MyISAM之外就是InnoDB了,InnoDB写的处理速度相对于MyISAM效率低一些,牺牲了存储和查询的效率,支持事务安全,支持自动增长列,对事务安全的支持是InnoDB成为mysql最为流行的存储引擎之一的重要原因。

1)支持事务

Mysql支持对InnoDB存储事务控制,实现了SQL92标准所定义的4个级别:

1、read uncommintted

2、repeatable read

3、read committed

4、serializable

mysql通过commit、rollback、set autocommit、start transaction 等语法支持本地事务

2)自动增长列

InnoDB表的自动增长需要在列的后面添加auto increment属性,在添加表数据的过程中,可以插入空值,该列可以自动增加数据;

3)外键约束

InnoDB实现了外键这一数据库重要功能,从数据库性能上讲数据库外键降低了数据库查询的效率,数据库表之间耦合度更加紧密,但是对于不少用户来讲,采用外键约束可能是最低成本的选择方式。Mysql支持外键的引擎只有InnoDB。在创建外键的时候,要求父表必须又对应的索引,子表在创建外键的时候会添加对应的索引。

在物理存储上,InnoDB有自己的存储方式,表结构信息也是存放在.frm文件里面的,但是表数据和索引数据是存放在一起的。InnoDB的存储表数据和索引数据的方式有两种:

1)共享表空间存储

  也就是所有的表数据和索引数据存放在同一个表空间中,数据和索引在innodb_data_home_dir和innodb_data_file_path定义的表空间中,可以使用一个或者多个数据文件(.ibdata文件);

2)多表空间存储(独享表空间)

  这种存储方式创建的表结构存放在.frm文件中,但是每个表数据和索引数据存放在一个单独的.ibd文件中。如果是分区表,则每个分区对应单独的.ibd文件,文件名称是“表名+分区名”,可以在创建分区的时候指定每个分区的数据文件的路径,这样的好处是可以将表的读取平均分布到若干个磁盘分区文件上,提高数据访问的效率。

  要使用多表空间存储方式,需要设置:innodb_file_per_table参数。该参数可以修改InnoDB为独立的表空间模式,每个数据库的表都会生成一个数据空间。

可以用以下命令查看多表空间模式是否已经开启:

SHOW VARIABLES LIKE ‘%per_table%‘

在设置innodb_file_per_table之前,需要先关闭数据库,然后在my.cnf文件中设置或者添加参数:innodb_file_per_table=1,并重启数据库生效。

使用多表空间特性的表,可以比较方便的进行表备份和恢复,但是直接复制.idb文件是不行的,可以通过以下命令:

ALTER TABLE table_name DISCARD TABLESPACE;
ALTER TABLE table_name IMPORT TABLESPACE;

InnoDB在功能上跟MyISAM存储引擎有很大的不同,在参数配置上,InnoDB也是单独处理的,InnoDB所有的参数基本上都是加了前缀"innodb_"。

如果想屏蔽InnoDB存储引擎,在my.cnf文件中,将skip-innodb参数前的#去除,这样就无法创建InnoDB类型的表了。

参考:《mysql技术内幕》

原文地址:https://www.cnblogs.com/lay2017/p/9165240.html

时间: 2024-11-06 09:32:55

二、mysql存储引擎之InnoDB的相关文章

更换Mysql存储引擎为Innodb

更换Mysql存储引擎为Innodb 问题:由于环境中的Mysql数据库使用的是Mysql5.1.77版本 ,使用的是MYISAM引擎 ,会导致表级锁,并且不支持故障自动恢复(CSR) 表级锁:对表中任意一行数据修改操作时,整个表都会被锁定,对其他行的数据都不能操作 不支持故障自动恢复(CSR) :当断电时可能会出现数据损坏或丢失的问题 解决方案: 将数据库升级到5.6.44版本并更换引擎为Innodb 5.1.77里对Innodb的支持不够完善,更换版本为5.6.44 实现步骤(使用aaa演示

mysql 存储引擎 myisam innodb 区别

虽然MySQL里的存储引擎不只是MyISAM与InnoDB这两个,但常用的就是它俩了.可能有站长并未注意过MySQL的存储引擎,其实存储引擎也是数据库设计里的一大重要点,那么博客系统应该使用哪种存储引擎呢?下面我们分别来看两种存储引擎的区别. MySQL存储引擎MyISAM与InnoDB的区别 一.InnoDB支持事务,MyISAM不支持,这一点是非常之重要.事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了. 二.MyISAM适合查询以及插入为主的

MySQL存储引擎【InnoDB、MyISAM、Memory】

数据库,MySQL这样存在多存储引擎的数据库软件,清楚常见的存储引擎的区别,使用合适的存储引擎,使得项目跑的更顺畅,有时候对于一个项目,甚至比项目本身都重要.这篇文章,旨在浅谈常见的三种存储引擎的区别,优缺点.是学习也是分享. 1:查看MySQL所支持的存储引擎: 1.1 show engines; 1.2 show variables like 'have%'; 这样,我们清楚了MySQL所支持的存储引擎都有哪些. 下面,分析一下几个常见的存储引擎.InnoDB,MYISAM和Memory.

浅谈MySQL存储引擎选择 InnoDB还是MyISAM

如果是一些小型的应用或项目,那么MyISAM 也许会更适合.当然,在大型的环境下使用MyISAM 也会有很大成功的时候,但却不总是这样的.如果你正在计划使用一个超大数据量的项目,那么你应该直接使用InnoDB方式. MyISAM 是MySQL中默认的存储引擎,一般来说不是有太多人关心这个东西.决定使用什么样的存储引擎是一个很tricky的事情,但是还是值我们去研究一下,这里的文章只考虑 MyISAM 和InnoDB这两个,因为这两个是最常见的. 下面先让我们回答一些问题:◆你的数据库有外键吗? 

Mysql 存储引擎中InnoDB与MyISAM差别(网络整理)

1. 事务处理 innodb 支持事务功能,myisam 不支持. Myisam 的运行速度更快,性能更好. 2,select ,update ,insert ,delete 操作 MyISAM:假设运行大量的SELECT.MyISAM是更好的选择 InnoDB:假设你的数据运行大量的INSERT或UPDATE,出于性能方面的考虑.应该使用InnoDB表 3.锁机制不同 InnoDB 为行级锁,myisam 为表级锁. 注意:当数据库无法确定所找的行时.也会变为锁定整个表. 如: update

Mysql 存储引擎中InnoDB与MyISAM区别(网络整理)

1, 事务处理 innodb 支持事务功能,myisam 不支持. Myisam 的执行速度更快,性能更好. 2,select ,update ,insert ,delete 操作 MyISAM:如果执行大量的SELECT,MyISAM是更好的选择 InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表 3,锁机制不同 InnoDB 为行级锁,myisam 为表级锁. 注意:当数据库无法确定所找的行时,也会变为锁定整个表. 如: update

[MySQL] 存储引擎中InnoDB与Myisam的主要区别

1, 事务处理 innodb 支持事务功能,myisam 不支持. Myisam 的执行速度更快,性能更好.   2,select ,update ,insert ,delete 操作   MyISAM:如果执行大量的SELECT,MyISAM是更好的选择 InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表 3,锁机制不同   InnoDB 为行级锁,myisam 为表级锁. 注意:当数据库无法确定,所找的行时,也会变为锁定整个表. 如: 

Mysql存储引擎中InnoDB与Myisam的区别

1. 事务处理innodb 支持事务功能,myisam 不支持.Myisam 的执行速度更快,性能更好. 2. select ,update ,insert ,delete 操作MyISAM:如果执行大量的SELECT,MyISAM是更好的选择InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表3. 锁机制不同 InnoDB 为行级锁,myisam 为表级锁. 注意:当数据库无法确定,所找的行时,也会变为锁定整个表.如: update tab

【转】Mysql 存储引擎中InnoDB与Myisam的主要区别

1, 事务处理 innodb 支持事务功能,myisam 不支持. Myisam 的执行速度更快,性能更好.   2,select ,update ,insert ,delete 操作   MyISAM:如果执行大量的SELECT,MyISAM是更好的选择 InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表 3,锁机制不同   InnoDB 为行级锁,myisam 为表级锁. 注意:当数据库无法确定,所找的行时,也会变为锁定整个表. 如: