MySql中启用InnoDB数据引擎简介 以及 InnoDB与 MYISAM的区别和联系

1、存储引擎是什么?

  MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。MySql默认配置了许多不同的存储引擎,可以预先设置或者在MySql服务器中启用。

  2、MYSQL支持的数据引擎

  MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。

  InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。

  BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。

  Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。

  Merge:允许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。

  Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。

  Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。

  Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。

  Other:其他存储引擎包括CSV(引用由逗号隔开的用作数据库表的文件),Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎(可为快速创建定制的插件式存储引擎提供帮助)。

  3、启动InnoDB引擎的方法

  Mysql中默认的是MyISAM数据引擎,可惜此引擎不支持事务处理,我们需要将默认的数据引擎改为InnoDB。其中InnoDB和BerkeleyDB支持事务处理,只是默认的情况下都是被disable的。所有的引擎里面,InnoDB性能最强大,算是商业级的。启动InnoDB引擎的方法如下

  1)关闭mysql的服务

  2)修改my.ini

  将default-storage-engine=INNODB前的注释(#)去掉

  将skip-innodb这行注释(加上#)

  3)保存后重启mysql服务

  4、MyISAM引擎和InnoDB引擎的基本差别

Innodb引擎

Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL后台的完整数据库系统,MySQL运行时Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎不支持FULLTEXT类型的索引,而且它没有保存表的行数,当SELECT COUNT(*) FROM TABLE时需要扫描全表。当需要使用数据库事务时,该引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率。但是使用行级锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表。

MyIASM引擎

MyIASM是MySQL默认的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。不过和Innodb不同,MyIASM中存储了表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyIASM也是很好的选择。

主要区别:

1、MyIASM是非事务安全的,而InnoDB是事务安全的

2、MyIASM锁的粒度是表级的,而InnoDB支持行级锁

3、MyIASM支持全文类型索引,而InnoDB不支持全文索引

4、MyIASM相对简单,效率上要优于InnoDB,小型应用可以考虑使用MyIASM

5、MyIASM表保存成文件形式,跨平台使用更加方便

应用场景:

1、MyIASM管理非事务表,提供高速存储和检索以及全文搜索能力,如果再应用中执行大量select操作,应该选择MyIASM

2、InnoDB用于事务处理,具有ACID事务支持等特性,如果在应用中执行大量insert和update操作,应该选择InnoDB

  这些区别能够影响应用程序的性能和功能,因此你必须针对业务类型来选择合适的引擎,才能最大的发挥MySQL的性能优势。

时间: 2024-10-29 00:25:16

MySql中启用InnoDB数据引擎简介 以及 InnoDB与 MYISAM的区别和联系的相关文章

MySql中启用InnoDB数据引擎的方法

1.存储引擎是什么? Mysql中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能.这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型).MySql默认配置了许多不同的存储引擎,可以预先设置或者在MySql服务器中启用. 2.MYSQL支持的数据引擎 MyISAM:默认的MySQL插件式存储引擎,它是

一种基于MySQL Innodb数据引擎的增备方法_爱学术

[摘要]针对MySql Innodb数据引擎二进制日志备份较慢的问题,提出了一种基于MySQL Innodb存储引擎的增量备份方法,可以实现最短时间的备份,每次记录相对于上次完全备份点差异的数据.增备是速度最快的备份方法,而且需要最少的存储空间.但是增备却需要最长时间来完成恢复.增备方法基于日志页序列号,通过计算差值而直接对LOG页进行拷贝而实现,避免重复执行SQL语句,相比优于以前的BINLOG复制增备方案. [作者] 邬文轩  胡晓勤 转载至爱学术:https://www.ixueshu.c

MySQL中快速复制数据表方法汇总

本文将着重介绍两个MySQL命令的组合,它将以原有数据表为基础,创建相同结构和数据的新数据表. 这可以帮助你在开发过程中快速的复制表格作为测试数据,而不必冒险直接操作正在运行 的数据表. 示例如下: 将 production 数据库中的 mytbl 表快速复制为 mytbl_new,2个命令如下: CREATE TABLE mytbl_new LIKE production.mytbl; INSERT mytbl_new SELECT * FROM production.mytbl; 第一个命令

mysql中插入中文数据

今天遇到的问题使mysql中插入中文数据后显示乱码,我在mysql中插入中文的时候,可以插入可是select的时候却无法显示,为此我写下这篇博客用于解决mysql插入中文. 由于有些截图没有记录下来,但是为了说明问题,我借用了别人的图,主要是为了完整的描述问题,在没有任何修改的时候,我们可以在mysql命令行中敲入以下指令,其结果如下所示: show variables like 'character%'; 可以看到,以上的编码并不支持中文,所以我们需要改变他们的编码(我这里是改成了utf8格式

MySQL中常用的存储引擎(MyISAM 和InnoDB)

 数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS)使用存储引擎进行创建.查询.更新和删除数据操作.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能.现在许多的数据库管理系统都支持多种不同的存储引擎.MySQL的核心就是存储引擎. 使用 SHOW ENGINES; 命令查看MySQL支持的存储引擎,  Support 列表示某种引擎是否可以使用,YES表示可以,NO表示不可以,DEFAULT表示当前默认存储引擎. mysql> SH

论MySQL数据库中两种数据引擎的差别

InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定. 基本的差别为: MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持. MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能. MyIASM是IASM表的新版本,有如下扩展: 二进制层次的可移植性. NULL列索引. 对变长行比ISAM表有更少的碎片. 支持大文件. 更好的索引压缩. 更好的键吗统计分布.

【MySQL】MySQL中针对大数据量常用技术_创建索引+缓存配置+分库分表+子查询优化(转载)

原文地址:http://blog.csdn.net/zwan0518/article/details/11972853 目录(?)[-] 一查询优化 1创建索引 2缓存的配置 3slow_query_log分析 4分库分表 5子查询优化 二数据转移 21插入数据 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求.这个时候NoSQL的出现暂时解决了这一危机.它通过降低数据的安全性,减少对事务

【3.3】mysql中的Federated存储引擎,远程表,相当于sql server的linked server

MySQL中针对不同的功能需求提供了不同的存储引擎.所谓的存储引擎也就是MySQL下特定接口的具体实现. FEDERATED是其中一个专门针对远程数据库的实现.一般情况下在本地数据库中建表会在数据库目录中生成相应的表定义文件,并同时生成相应的数据文件. 但通过FEDERATED引擎创建的表只是在本地有表定义文件,数据文件则存在于远程数据库中(这一点很重要). 通过这个引擎可以实现类似Oracle 下DBLINK的远程数据访问功能. 1.使用show engines 命令查看数据库是否已支持FED

向mysql中批量插入数据的性能分析

MYSQL批量插入数据库实现语句性能分析 假定我们的表结构如下 代码如下   CREATE TABLE example (example_id INT NOT NULL,name VARCHAR( 50 ) NOT NULL,value VARCHAR( 50 ) NOT NULL,other_value VARCHAR( 50 ) NOT NULL) 通常情况下单条插入的sql语句我们会这么写: 代码如下   INSERT INTO example(example_id, name, valu