查找数据库的存数引擎:

show engines

show variables like '%storage_engine%'

更改数据库的引擎更改配置文件/etc/my.cnf

改动default-storage-engine=InnoDB(须要更改的存储引擎)。然后重新启动数据库

service mysqld restart

alter table engine=innodb

存储引擎说白了就是怎样存储数据、怎样为存储的数据建立索引和怎样更新、查询数据等技术的实现方法。

由于在关系数据库中数据的存储是以表的形式存储的。所以存储引擎也能够称为表类型(即存储和操作此表的类型)

下述存储引擎是最经常使用的:

MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其它应用环境下最常使用的MySQL存储引擎之中的一个。注意。通过更改STORAGE_ENGINE配置变量。可以方便地更改MySQLserver的默认存储引擎。

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

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

Memory:将全部数据保存在RAM中,在须要高速查找引用和其它类似数据的环境下,可提供极快的訪问。

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

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

Federated:可以将多个分离的MySQLserver链接起来,从多个物理server创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。

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

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

请记住,对于整个server或方案,你并不一定要使用同样的存储引擎。你能够为方案中的每一个表使用不同的MySQL存储引擎,这点非常重要。

下面主要讲叙myisam 与innodb

MyISAM存储引擎

MyISAM是 默认存储引擎。

它基于更老的ISAM代码,但有非常多实用的扩展。MyISAM存储引擎的一些特征:

·      全部数据值先存储低字节。这使得数据机和操作系统分离。

二进制轻便性的唯一要求是机器使用补码(如近期20年的机器有的一样)和IEEE浮点格式(在主流机器中也全然是主导的)。唯一不支持二进制兼容性的机器是嵌入式系统。这些系统有时使用特殊的处理器。


·      先存储数据低字节并不严重地影响速度;数据行中的字节通常是未联合的,从一个方向读未联合的字节并不比从反向读更占用很多其他的资源。server上的获取列值的代码与其他代码相比并不显得时间紧。

·      大文件(达63位文件长度)在支持大文件的文件系统和操作系统上被支持。

·      当把删除和更新及插入混合的时候。动态尺寸的行更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块来自己主动完毕。

·      每一个MyISAM表最大索引数是64。 这能够通过又一次编译来改变。每一个索引最大的列数是16个。

·      最大的键长度是1000字节。这也能够通过编译来改变。

对于键长度超过250字节的情况,一个超过1024字节的的键块被用上。

·      BLOB和TEXT列能够被索引。

·      NULL值被同意在索引的列中。这个占每一个键的0-1个字节。

·      全部数字键值以高字节为先被存储以同意一个更高地索引压缩。

·      当记录以排好序的顺序插入(就像你使用一个AUTO_INCREMENT列之时)。索引树被劈开以便高节点仅包括一个键。

这改善了索引树的空间利用率。

·      每表一个AUTO_INCREMEN列的内部处理。MyISAM为INSERT和UPDATE操作自己主动更新这一 列。这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不能再利用。

(当AUTO_INCREMENT列被定义为多列索 引的最后一列,能够出现重使用从序列顶部删除的值的情况 )。AUTO_INCREMENT值可用ALTER TABLE或myisamch来重置。

·      假设数据文件里间的表没有自由块了,在其他线程从表读的同一时候,你能够INSERT新行到表中。(这被认识为并发操作 )。自由块的出现是作为删除行的结果。或者是用比当前内容多的数据对动态长度行更新的结果。当全部自由块被用完(填满),未来的插入又变成并发。


·      你能够把数据文件和索引文件放在不同文件夹,用DATA DIRECTORY和INDEX DIRECTORY选项CREATE TABLE以获得更高的速度。请參阅13.1.5节。“CREATE TABLE语法”。


·      每一个字符列能够又不同的字符集。

·      在MyISAM索引文件中又一个标志,它表明表是否被正确关闭。假设用--myisam-recover选项启动mysqld。MyISAM表在打开得时候被自己主动检查,假设被表被不恰当地关闭。就修复表。


·      假设你用--update-state选项执行myisamchk,它标注表为已检查。

myisamchk --fast仅仅检查那些没有这个标志的表。

·      myisamchk --analyze为部分键存储统计信息。也为整个键存储统计信息。

·      myisampack能够打包BLOB和VARCHAR列。



MyISAM也支持下列特征:

·         支持true VARCHAR类型;VARCHAR列以存储在2个字节中的长度来開始。

·         有VARCHAR的表能够有固定或动态记录长度。

·         VARCHAR和CHAR列能够多达64KB。

·         一个被搞乱的已计算索引对可对UNIQUE来使用。这同意你在表内不论什么列的合并上有UNIQUE。

(虽然如此,你不能在一个UNIQUE已计算索引上搜索)。



InnoDB存储引擎

        InnoDB给MySQL提供 了具有提交。回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。

InnoDB锁定在行级而且也在SELECT语句提供一个Oracle风格一致的非 锁定读。这些特色添加 了多用户部署和性能。

没有在InnoDB中扩大锁定的须要,由于在InnoDB中行级锁定适合很小的空间。

InnoDB也支持FOREIGN KEY强制。在SQL查询中,你能够自由地将InnoDB类型的表与其他MySQL的表的类型混合起来。甚至在同一个查询中也能够混合。


        InnoDB是为处理巨大数据量时的最大性能设计。它的CPU效率可能是不论什么其他基于磁盘的关系数据库引擎所不能匹敌的。

        InnoDB存储引擎被全然与MySQLserver整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。 InnoDB存储它的表&索引在一个表空间中,表空间能够包括数个文件(或原始磁盘分区)。

这与MyISAM表不同,比方在MyISAM表中每一个表被存在 分离的文件里。

InnoDB 表能够是不论什么尺寸。即使在文件尺寸被限制为2GB的操作系统上。


        InnoDB默认地被包括在MySQL二进制分发中。

Windows Essentials installer使InnoDB成为Windows上MySQL的 默认表。


        InnoDB被用来在众多须要高性能的大型数据库网站上产生。著名的Internet新闻网站Slashdot.org执行在 InnoDB上。

Mytrix, Inc.在InnoDB上存储超过1TB的数据,另一些其他网站在InnoDB上处理平均每秒800次插入/更新的负荷。





InnoDB和MyISAM的差别

差别概述:

MyISAM 是MySQL中默认的存储引擎。一般来说不是有太多人关心这个东西。

决定使用什么样的存储引擎是一个非常tricky的事情,可是还是值我们去研究一下,这里的文章仅仅考虑 MyISAM 和InnoDB这两个,由于这两个是最常见的。



以下先让我们回答一些问题:



你的数据库有外键吗?

你须要事务支持吗?

你须要全文索引吗?

你常常使用什么样的查询模式?

你的数据有多大?

 



思考上面这些问题能够让你找到合适的方向。但那并非绝对的。

假设你须要事务处理或是外键,那么InnoDB 可能是比較好的方式。假设你须要全文索引。那么通常来说 MyISAM是好的选择。由于这是系统内建的,然而。我们事实上并不会常常地去測试两百万行记录。

所以。就算是慢一点。我们能够通过使用Sphinx从 InnoDB中获得全文索引。

数据的大小,是一个影响你选择什么样存储引擎的重要因素。大尺寸的数据集趋向于选择InnoDB方式,由于其支持事务处理和故障恢复。数据库的在小 决定了故障恢复的时间长短,InnoDB能够利用事务日志进行数据恢复,这会比較快。

而MyISAM可能会须要几个小时甚至几天来干这些事。InnoDB 仅仅须要几分钟。

您操作数据库表的习惯可能也会是一个对性能影响非常大的因素。

比方: COUNT() 在 MyISAM 表中会非常快。而在InnoDB 表下可能会非常痛苦。而主键查询则在InnoDB下会相当相当的快,但须要小心的是假设我们的主键太长了也会导致性能问题。大批的inserts 语句在MyISAM下会快一些,可是updates 在InnoDB 下会更快一些——尤其在并发量大的时候。

所以,究竟你检使用哪一个呢?依据经验来看,假设是一些小型的应用或项目,那么MyISAM 或许会更适合。

当然。在大型的环境下使用MyISAM 也会有非常大成功的时候,但却不总是这种。假设你正在计划使用一个超大数据量的项目,并且须要事务处理或外键支持,那么你真的应该直接使用InnoDB方 式。

但须要记住InnoDB 的表须要很多其它的内存和存储,转换100GB 的MyISAM 表到InnoDB 表可能会让你有非常坏的体验。

差别总结:

1.InnoDB不支持FULLTEXT类型的索引。

2.InnoDB 中不保存表的详细行数。也就是说,运行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,可是MyISAM仅仅要简单的读出保存好的行数就可以。注意的是,当count(*)语句包括 where条件时。两种表的操作是一样的。

3.对于AUTO_INCREMENT类型的字段。InnoDB中必须包括仅仅有该字段的索引,可是在MyISAM表中,能够和其它字段一起建立联合索引。

4.DELETE FROM table时。InnoDB不会又一次建立表,而是一行一行的删除。

5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的。解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,可是对于使用的额外的InnoDB特性(比如外键)的表不适用。

另外,InnoDB表的行锁也不是绝对的,假设在运行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表相同会锁全表。比如update table set num=1 where name like “%aaa%”



 

remap

提升InnoDB性能的方法:

MyISAM和InnoDB存储引擎性能区别并非非常大。针对InnoDB来说,影响性能的主要是 innodb_flush_log_at_trx_commit 这个选项,假设设置为1的话。那么每次插入数据的时候都会自己主动提交,导致性能急剧下降。应该是跟刷新日志有关系,设置为0效率可以看到明显提升。当然,同 样你可以SQL中提交“SET AUTOCOMMIT = 0”来设置达到好的性能。另外,还听说通过设置innodb_buffer_pool_size可以提升InnoDB的性能,可是我測试发现没有特别明显 的提升。



基本上我们可以考虑使用InnoDB来替代我们的MyISAM引擎了。由于InnoDB自身非常多良好的特点。比方事务支持、存储 过程、视图、行级锁定等等,在并发非常多的情况下,相信InnoDB的表现肯定要比MyISAM强非常多,当然,对应的在my.cnf中的配置也是比較关键 的。良好的配置,可以有效的加速你的应用。

不论什么一种表都不是万能的,仅仅用恰当的针对业务类型来选择合适的表类型,才干最大的发挥MySQL的性能优势

mysql存储引擎的种类与差别(innodb与myisam)的更多相关文章

  1. 转mysql存储引擎memory,ndb,innodb之选择

    1 mysql的innodb和cluster的NDB引擎都支持事务,在有共同的特性外,也有不同之处:以mysql cluster NDB 7.3和MySQL 5.6之InnoDB为例:ndb7.3基于 ...

  2. MySQL存储引擎:InnoDB和MyISAM的差别/优劣评价/评测/性能测试

    InnoDB和MyISAM简介 MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的 顺序访问方法) 的缩写 ...

  3. MySQL存储引擎之Myisam和Innodb总结性梳理

    Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比   MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名字开始 ...

  4. MySQL存储引擎之Myisam和Innodb总结性梳理-转

    原文链接:https://www.cnblogs.com/kevingrace/p/5685355.html 谢谢楼主 Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比 ...

  5. MySQL存储引擎 - Myisam和Innodb

    Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比   MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名字开始 ...

  6. 常用Mysql存储引擎--InnoDB和MyISAM简单总结

    常用Mysql存储引擎--InnoDB和MyISAM简单总结 2013-04-19 10:21:52|  分类: CCST|举报|字号 订阅     MySQL服务器采用了模块化风格,各部分之间保持相 ...

  7. MySQL存储引擎InnoDB与Myisam

    InnoDB与Myisam的六大区别 InnoDB与Myisam的六大区别 MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名字开始,扩展名 ...

  8. 170309、MySQL存储引擎MyISAM与InnoDB区别总结整理

    1.MySQL默认存储引擎的变迁 在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB. 2.MyISAM与InnoDB存 ...

  9. MySQL存储引擎MyISAM与InnoDB

    一. MySQL存储引擎MyISAM与InnoDB如何选择 MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用:MyISAM.InnoDB.MERGE.MEMORY(HEAP).B ...

随机推荐

  1. Douglas Peucker算法的C#实现

    一.算法原理 Douglas-Peucker算法 在数字化过程中,需要对曲线进行采样简化,即在曲线上取有限个点,将其变为折线,并且能够在一定程度 上保持原有的形状. 经典的Douglas-Peucke ...

  2. JS删除数组中某一项或几项的方法汇总

    1.JS中的splice方法 splice(index, len, [item])    //注意:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值. ...

  3. Cisco模拟器Web-IOU使用说明 转

    http://blog.sina.com.cn/s/blog_af0abf1f0102uztk.html   GNS3作为使用最多的Cisco官方模拟器,是因为它使用简单,所有设置图形化,是一款非常强 ...

  4. 重新认识JavaScript里的创建对象

    一.序 面向对象有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.ECMA-262把对象定义为“无序属性的集合,其属性可以包含基本值.对象或者函数”. 使用Obje ...

  5. dd-wrt端口映射不出去的解决办法

    本人有一个巴法络的WZR-HP-G450H系统自带的固件不好用,但是随机却带了一个官方定制的DD-WRT,于是刷了去,但是今天在做一个FTP的时候突然无论怎么样映射或是做DMZ都不会出去,终于找到解决 ...

  6. webstorm9 License Key

    用户名 oschina 注册码 ===== LICENSE BEGIN ===== 7362-D18089T 00000xmyY1VfVxjkElWULKcA5XHbfN 5qjOh3fgGZvNXH ...

  7. iOS:MBProgressHUD的基本使用

    下载地址:https://github.com/jdg/MBProgressHUD/ //方式1.直接在View上show HUD = [[MBProgressHUD showHUDAddedTo:s ...

  8. Java源码阅读PriorityQueue

    1类签名与简介 public class PriorityQueue<E> extends AbstractQueue<E> implements java.io.Serial ...

  9. pig笔记

    1.安装Pig 将pig添加到环境变量当中 2.pig使用 首先将数据库中的数据导入到HDFS上 sqoop import --connect jdbc:mysql://192.168.1.10:33 ...

  10. git 出现502错误后用depth一步一步来

    公司有个项目的git仓库,因为一些二进制文件也放在里面,版本迭代后,整个仓库特别大,有好几G. 直接git clone是不行的,会报这样的错误: error: RPC failed; HTTP 502 ...