MYSQL MYISAM引擎与INNODB引引擎的区别

MYISAM和INNODB是MYSQL数据库的两个主要引擎,MYISAM是MYSQL5.5版本之前的默认的引擎,而INNODB是MYSQL 5.5版本默认引擎。

两个引擎的区别如下:

  1. 事务处理

    INNODB支持事务处理功能,事务具有以下4个属性,通常简称为事务的ACID属性。

    原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。

    一致性(Consisten):在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性; 事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的。

    隔离性(ISOLATION)数据库系统提供一定的隔离机制,保证事务在不受外部并发操作的影响的“独立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然。

    持久性:事务完成之后,它对于数据的修改是永久性的,即使出现系统故障都保持。

    MYISAM不支持事务处理。

  2. SELECT ,UPDATE,INSERT,DELETE操作

    MYISAM:如果大量的SELECT,MYISAM是更好的选择

    INNODB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面考虑,应该使用INNODB。

  3. 锁机制不同

    INNODB 为行级锁,MYISAM为表级锁。

  4. 查询表的行数不同

    MYISAM 记录表的总行数,所以当 COUNT(*)相对很快。

    INNODB :不保存表的具体行数,也就是COUNT(*)时要对表进行一次全表扫描。

  5. MYISAM:每个MYISAM的表在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。

    .frm文件存储表定义。

    数据文件的扩展名为.MYD (MYData)。

    索引文件的扩展名是.MYI (MYIndex)

INNODB :分为两种方式,一种为共享表空间方式,这种是所有表以及UNDO,索引都放在一个或多个表空间文件里,文件大小最大为64TB。第二种为每个表为一个单独的表空间。

6.MYISAM的表存储方式是HOT表,堆表。

INNODB表的存储方式是IOT表,(索引组织表)

7.MyISAM 使用B+Tree 作为索引结构,叶子节点的data存放指针,也就是记录的地址。对于主键索引和辅助索引都是一样的。

InnoDB 也使用B+Tree作为索引结构,也别需要注意的是,对于主键索引,InnoDB 使用聚集索引,InnoDB的数据文件本身就是就是索引文件。而MyISAM,主键索引和数据文件是分离的。

InnoDB数据文件,要按主键聚集索引,这就要求InnoDB的表必须要有主键(MyISAM可以没有)。如果没有显式指定主键,InnoDB会自动选择一个可以唯一标识记录的字段作为主键,比如auto_increment的字段,如果不存在这样的列,InnoDB会自动生成一个隐含字段作为主键,这个隐含字段6个字节,是长整形。

对于InnoDB的辅助索引,叶子节点的data存放的是主键的值。这就意味着,使用辅助索引定位记录,需要使用两次索引:首先使用辅助索引找到主键的值,根据主键的值,使用主键索引找到记录。

InnoDB的辅助索引为什么要这样设计?
如果辅助索引data存放的行指针,当行移动或者数据页分裂时,需要更新data域行指针的值,这就增加维护成本。data存在主键的值,就没有这个问题。行移动和数据页分裂,主键索引会自动更新。data关联主键的值,不需要更新,相当于增加一个间接层。这个间接层对性能的影响也很小,因为通过主键定位记录是非常快的。

了解了innoDB的索引实现,有几个地方需要注意:
不要使用过长的字段作为主键,因为辅助索引都要使用主键索引定位记录,这个字段过长,使用内存更大,影响性能。
使用单调的字段作为主键,特别是insert的时候,如果是非单调的,B+Tree维护成本很高。

这就能很好解释,隔离级别 repeatable-read, 不使用索引锁住整个表,使用索引(主键索引或者辅助索引)只会锁住对应的行。

在查询执行计划中,有一个字段 type, eq_ref 表示使用主键索引,直接定位到记录。而ref 表示先使用辅助索引,找到主键的值,再使用主键索引定位到记录。

8.MYISAM不支持外键,INNODB支持外键

6mmy、my1, MyISAM :每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。

时间: 2024-10-26 22:49:51

MYSQL MYISAM引擎与INNODB引引擎的区别的相关文章

Mysql MyISAM数据库批量转换表引擎为Innodb

Mysql MyISAM数据库批量转换表引擎为Innodb 最近在做事物处理需要把表结构都改为带有支持事物的Innodb引擎格式, 把里面数据库 用户名.密码 等信息修改为你自己的,放在网站下运行即可.如果想把Innodb改为MyISAM修改里面的  engine='InnoDB'  部分代码. <?php /** * User: Yt * Date: 2016/2/25 0025 */ //连接数据库 $host='localhost'; $user='root'; //数据库用户名 $pas

[MySQL Reference Manual]14 InnoDB存储引擎

14 InnoDB存储引擎 14 InnoDB存储引擎... 1 14.1 InnoDB说明... 5 14.1.1 InnoDB作为默认存储引擎... 5 14.1.1.1 存储引擎的趋势... 5 14.1.1.2 InnoDB变成默认存储引擎之后... 5 14.1.1.3 InnoDB表好处... 6 14.1.1.4 InnoDB表最佳实践... 6 14.1.1.5 InnoDB表提升... 6 14.1.1.6 InnoDB作为默认存储引擎测试... 6 14.1.1.7 验证In

MySQL MyISAM 库转换为InnoDB的方法

1.备份数据库: mysqldump -u[user] -p[password] [databasename] > [dbfile.sql] # 备份数据库.2. /usr/local/mysql/bin/mysqladmin -u root -p shutdown # 停止数据库 或者 service mysql stop.3. InnoDB 表不支持全文搜索(fulltext search),那么,记得要将备份出来的数据库sql,删掉有关 Fulltext 的索引.4. cd /usr/lo

INNODB与MyISAM两种表存储引擎区别

mysql数据库分类为INNODB为MyISAM两种表存储引擎了,两种各有优化在不同类型网站可能选择不同,下面小编为各位介绍mysql更改表引擎INNODB为MyISAM技巧. 常见的mysql表引擎有INNODB和MyISAM,主要的区别是INNODB适合频繁写数据库操作,MyISAM适合读取数据库的情况多一点,如何把表引擎INNODB更改为MyISAM呢? 使用以下mysql sql语句,可以给表设定数据库引擎: ALTER TABLE `wp_posts` ENGINE = MyISAM;

【数据库】Mysql更改默认引擎为Innodb的步骤方法

前言 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定. 基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能. 我为什么要改默认引擎,其实原因很简单,我使用的Mysql默认引擎是MyISAM,而MyISAM并不支持事务处理,所以我需要更换它的引擎. 更改 Mysql 默

更改mysql默认引擎为Innodb 单个多个

mysql默认是关闭InnoDB存储引擎的使用的,将InnoDB设置为默认的引擎如下.1. 查看mysql存储引擎情况: mysql>show engines. InnoDB | YES,说明此mysql数据库服务器支持InnoDB引擎.2. 设置InnoDB为默认引擎:在配置文件my.ini中的 [mysqld] 下面加入default-storage-engine=INNODB3. 重启mysql服务器4. 登录mysql数据库,mysql>show engines.如果出现 InnoDB

数据库引擎介绍innodb和myisam

数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外两种类型INNODB和BERKLEY(BDB),也常常可以使用.如果技术高超,还可以使用MySQL+API自己做一个引擎.下面介绍几种数据库引擎:  ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到 数据库被查询的次数要远大于更新的次数.因此,ISAM执行读取

mysql之innodb存储引擎---数据存储结构

一.背景 1.1文件组织架构 首先看一下mysql数据系统涉及到的文件组织架构,如下图所示: msyql文件组织架构图 从图看出: 1.日志文件:slow.log(慢日志),error.log(错误日志),general.log(基本日志) 2.配置文件:my.cnf 3.数据库:performance_schema,mysql,information_schema,sys 4.innodb存储引擎(框中部分),主要包括有:两个日志文件ib_logfile0和ib_logfile1,由参数inn

MySQL:InnoDB存储引擎的B+树索引算法

很早之前,就从学校的图书馆借了MySQL技术内幕,InnoDB存储引擎这本书,但一直草草阅读,做的笔记也有些凌乱,趁着现在大四了,课程稍微少了一点,整理一下笔记,按照专题写一些,加深一下印象,不枉读了一遍书.与此同时,也加深一下对MySQL的了解,认识了原理,对优化的原则才有把握,对问题的分析才有源头. 关于B+树数据结构 ①InnoDB存储引擎支持两种常见的索引. 一种是B+树,一种是哈希.B+树中的B代表的意思不是二叉(binary),而是平衡(balance),因为B+树最早是从平衡二叉树