深入探讨:MySQL数据库MyISAM与InnoDB存储引擎的比较_Mysql

MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种。这里介绍关于这两种引擎的一些基本概念(非深入介绍)。
MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索,但不是事务安全的,而且不支持外键。每张MyISAM表存放在三个文件中:frm 文件存放表格定义;数据文件是MYD (MYData);索引文件是MYI (MYIndex)。
InnoDB是事务型引擎,支持回滚、崩溃恢复能力、多版本并发控制、ACID事务,支持行级锁定(InnoDB表的行锁不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,如like操作时的SQL语句),以及提供与Oracle类型一致的不加锁读取方式。InnoDB存储它的表和索引在一个表空间中,表空间可以包含数个文件。
主要区别:
•MyISAM是非事务安全型的,而InnoDB是事务安全型的。
•MyISAM锁的粒度是表级,而InnoDB支持行级锁定。
•MyISAM支持全文类型索引,而InnoDB不支持全文索引。
•MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。
•MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。
•InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。
应用场景:
•MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
•InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。
常用命令:
(1)查看表的存储类型(三种):
•show create table tablename
•show table status from  dbname  where name=tablename
•mysqlshow  -u user -p password --status dbname tablename
(2)修改表的存储引擎:
•alter table tablename type=InnoDB
(3)启动mysql数据库的命令行中添加以下参数使新发布的表都默认使用事务:
•--default-table-type=InnoDB
(4)临时改变默认表类型:
•set table_type=InnoDB
•show variables like 'table_type'

时间: 2024-09-20 09:04:32

深入探讨:MySQL数据库MyISAM与InnoDB存储引擎的比较_Mysql的相关文章

《MySQL技术内幕:InnoDB存储引擎第2版》——1.3 MySQL存储引擎

1.3 MySQL存储引擎 通过1.2节大致了解了MySQL数据库独有的插件式体系结构,并了解到存储引擎是MySQL区别于其他数据库的一个最重要特性.存储引擎的好处是,每个存储引擎都有各自的特点,能够根据具体的应用建立不同存储引擎表.对于开发人员来说,存储引擎对其是透明的,但了解各种存储引擎的区别对于开发人员来说也是有好处的.对于DBA来说,他们应该深刻地认识到MySQL数据库的核心在于存储引擎. 由于MySQL数据库的开源特性,用户可以根据MySQL预定义的存储引擎接口编写自己的存储引擎.若用

《MySQL技术内幕:InnoDB存储引擎第2版》——1.4 各存储引擎之间的比较

1.4 各存储引擎之间的比较 通过1.3节的介绍,我们了解了存储引擎是MySQL体系结构的核心.本节我们将通过简单比较几个存储引擎来让读者更直观地理解存储引擎的概念.图1-2取自于MySQL的官方手册,展现了一些常用MySQL存储引擎之间的不同之处,包括存储容量的限制.事务支持.锁的粒度.MVCC支持.支持的索引.备份和复制等.可以看到,每种存储引擎的实现都不相同.有些竟然不支持事务,相信在任何一本关于数据库原理的书中,可能都会提到数据库与传统文件系统的最大区别在于数据库是支持事务的.而MySQ

《MySQL技术内幕:InnoDB存储引擎第2版》——3.2 日志文件

3.2 日志文件 日志文件记录了影响MySQL数据库的各种类型活动.MySQL数据库中常见的日志文件有: ?错误日志(error log) ?二进制日志(binlog) ?慢查询日志(slow query log) ?查询日志(log) 这些日志文件可以帮助DBA对MySQL数据库的运行状态进行诊断,从而更好地进行数据库层面的优化.3.2.1 错误日志 错误日志文件对MySQL的启动.运行.关闭过程进行了记录.MySQL DBA在遇到问题时应该首先查看该文件以便定位问题.该文件不仅记录了所有的错

《MySQL技术内幕:InnoDB存储引擎第2版》——导读

前言 为什么要写这本书 过去这些年我一直在和各种不同的数据库打交道,见证了MySQL从一个小型的关系型数据库发展为各大企业的核心数据库系统的过程,并且参与了一些大大小小的项目的开发工作,成功地帮助开发人员构建了可靠的.健壮的应用程序.在这个过程中积累了一些经验,正是这些不断累积的经验赋予了我灵感,于是有了这本书.这本书实际上反映了这些年来我做了哪些事情,其中汇集了很多同行每天可能都会遇到的一些问题,并给出了解决方案. MySQL数据库独有的插件式存储引擎架构使其和其他任何数据库都不同.不同的存储

《MySQL技术内幕:InnoDB存储引擎第2版》——3.6 InnoDB存储引擎文件

3.6 InnoDB存储引擎文件 之前介绍的文件都是MySQL数据库本身的文件,和存储引擎无关.除了这些文件外,每个表存储引擎还有其自己独有的文件.本节将具体介绍与InnoDB存储引擎密切相关的文件,这些文件包括重做日志文件.表空间文件.3.6.1 表空间文件InnoDB采用将存储的数据按表空间(tablespace)进行存放的设计.在默认配置下会有一个初始大小为10MB,名为ibdata1的文件.该文件就是默认的表空间文件(tablespace file),用户可以通过参数innodb_dat

《MySQL技术内幕:InnoDB存储引擎第2版》——2.7 启动、关闭与恢复

2.7 启动.关闭与恢复 InnoDB是MySQL数据库的存储引擎之一,因此InnoDB存储引擎的启动和关闭,更准确的是指在MySQL实例的启动过程中对InnoDB存储引擎的处理过程. 在关闭时,参数innodb_fast_shutdown影响着表的存储引擎为InnoDB的行为.该参数可取值为0.1.2,默认值为1. ?0表示在MySQL数据库关闭时,InnoDB需要完成所有的full purge和merge insert buffer,并且将所有的脏页刷新回磁盘.这需要一些时间,有时甚至需要几

《MySQL技术内幕:InnoDB存储引擎第2版》——2.2 InnoDB存储引擎的版本

2.2 InnoDB存储引擎的版本 InnoDB存储引擎被包含于所有MySQL数据库的二进制发行版本中.早期其版本随着MySQL数据库的更新而更新.从MySQL 5.1版本时,MySQL数据库允许存储引擎开发商以动态方式加载引擎,这样存储引擎的更新可以不受MySQL数据库版本的限制.所以在MySQL 5.1中,可以支持两个版本的InnoDB,一个是静态编译的InnoDB版本,可将其视为老版本的InnoDB:另一个是动态加载的InnoDB版本,官方称为InnoDB Plugin,可将其视为Inno

《MySQL技术内幕:InnoDB存储引擎第2版》——2.1 InnoDB存储引擎概述

2.1 InnoDB存储引擎概述 InnoDB存储引擎最早由Innobase Oy公司开发,被包括在MySQL数据库所有的二进制发行版本中,从MySQL 5.5版本开始是默认的表存储引擎(之前的版本InnoDB存储引擎仅在Windows下为默认的存储引擎).该存储引擎是第一个完整支持ACID事务的MySQL存储引擎(BDB是第一个支持事务的MySQL存储引擎,现在已经停止开发),其特点是行锁设计.支持MVCC.支持外键.提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和CPU. Hei

《MySQL技术内幕:InnoDB存储引擎第2版》——3.7 小结

3.7 小结 本章介绍了与MySQL数据库相关的一些文件,并了解了文件可以分为MySQL数据库文件以及与各存储引擎相关的文件.与MySQL数据库有关的文件中,错误文件和二进制日志文件非常重要.当MySQL数据库发生任何错误时,DBA首先就应该去查看错误文件,从文件提示的内容中找出问题的所在.当然,错误文件不仅记录了错误的内容,也记录了警告的信息,通过一些警告也有助于DBA对于数据库和存储引擎进行优化. 二进制日志的作用非常关键,可以用来进行point in time的恢复以及复制(replica