本文主要整理了MySQL两大常用的存储引擎MyISAM,InnoDB的六大常见区别,来源于Mysql手册以及互联网的资料

InnoDB与Myisam的六大区别

MyISAM

InnoDB

构 成上的区别:

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

.frm文件存储表定义。

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

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

基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB表的 大小只受限于操作系统文件的大小,一般为2GB

事务处理上方面:

MyISAM类型的表强调的是性能,其执行数 度比InnoDB类型更快,但是不提供事务支持

InnoDB提供事务支持事务,外部键等高级 数据库功能

SELECT UPDATE,INSERT,Delete操 作

如果执行大量的SELECT,MyISAM是更好的选择

1.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表

2.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的 删除。

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

对AUTO_INCREMENT的 操作

每表一个AUTO_INCREMEN列的内部处理。

MyISAM为INSERT和UPDATE操 作自动更新这一列。这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不 能再利用。(当AUTO_INCREMENT列被定义为多列索引的最后一列, 可以出现重使用从序列顶部删除的值的情况)。

AUTO_INCREMENT值可用ALTER TABLE或myisamch来重置

对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但 是在MyISAM表中,可以和其他字段一起建立联 合索引

更好和更快的auto_increment处理

如果你为一个表指定AUTO_INCREMENT列,在数据词典里的InnoDB表句柄包含一个名为自动增长计数 器的计数器,它被用在为该列赋新值。

自动增长计数 器仅被存储在主内存中,而不是存在磁盘上

关于该计算器 的算法实现,请参考

AUTO_INCREMENT列 在InnoDB里 如何工作

表 的具体行数

select count(*) from table,MyISAM只要简单的读出保存好的行数,注意的是,当count(*)语句包含where条件时,两种表的操作是一样的

InnoDB中不 保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行

表锁

提供行锁(locking on row level),提供与Oracle类型一致的不加锁读取(non-locking read in

SELECTs),另外,InnoDB表的行锁也不是绝对的,如果在执 行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”

Part Two:

InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

MyIASM是IASM表的新版本,有如下扩展:

·二进制层次的可移植性。

·NULL列索引。

·对变长行比ISAM表有更少的碎片。

·支持大文件。

·更好的索引压缩。

·更好的键吗统计分布。

·更好和更快的auto_increment处理。

以下是一些细节和具体实现的差别:

◆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%”

综上所述,任何一种表都不是万能的,只有恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。

Part Three:

MySQL表结构

CREATE TABLE `myisam` (

`id` int(11) NOT NULL auto_increment,

`name` varchar(100) default NULL,

`content` text,

PRIMARY KEY  (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=gbk;

CREATE TABLE `innodb` (

`id` int(11) NOT NULL auto_increment,

`name` varchar(100) default NULL,

`content` text,

PRIMARY KEY  (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

数据内容$name = "heiyeluren";$content = "MySQL支持数个存储引擎作为对不同表的类型的处理器。MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎:· MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。MyISAM在所有MySQL配置里被支持,它是默认的存储引擎,除非你配置MySQL默认使用另外一个引擎。 ·MEMORY存储引擎提供“内存中”表。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。就像MyISAM一样,MEMORY和MERGE存储引擎处理非事务表,这两个引擎也都被默认包含在MySQL中。 释:MEMORY存储引擎正式地被确定为HEAP引擎。· InnoDB和BDB存储引擎提供事务安全表。BDB被包含在为支持它的操作系统发布的MySQL-Max二进制分发版里。InnoDB也默认被包括在所有MySQL 5.1二进制分发版里,你可以按照喜好通过配置MySQL来允许或禁止任一引擎。·EXAMPLE存储引擎是一个“存根”引擎,它不做什么。你可以用这个引擎创建表,但没有数据被存储于其中或从其中检索。这个引擎的目的是服务,在MySQL源代码中的一个例子,它演示说明如何开始编写新存储引擎。同样,它的主要兴趣是对开发者。";[插入数据-1] (innodb_flush_log_at_trx_commit=1)MyISAM 1W:3/sInnoDB 1W:219/sMyISAM 10W:29/sInnoDB 10W:2092/sMyISAM 100W:287/sInnoDB 100W:没敢测试[插入数据-2] (innodb_flush_log_at_trx_commit=0)MyISAM 1W:3/sInnoDB 1W:3/sMyISAM 10W:30/sInnoDB 10W:29/sMyISAM 100W:273/sInnoDB 100W:423/s[插入数据3] (innodb_buffer_pool_size=1024M)InnoDB 1W:3/sInnoDB 10W:33/sInnoDB 100W:607/s[插入数据4] (innodb_buffer_pool_size=256M, innodb_flush_log_at_trx_commit=1, set autocommit=0)InnoDB 1W:3/sInnoDB 10W:26/sInnoDB 100W:379/s[MySQL 配置文件] (缺省配置)# MySQL Server Instance Configuration File[client]port=3306[mysql]default-character-set=gbk[mysqld]port=3306basedir="C:/mysql50/"datadir="C:/mysql50/Data/"default-character-set=gbkdefault-storage-engine=INNODBsql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"max_connections=100query_cache_size=0table_cache=256tmp_table_size=50Mthread_cache_size=8myisam_max_sort_file_size=100Gmyisam_max_extra_sort_file_size=100Gmyisam_sort_buffer_size=100Mkey_buffer_size=82Mread_buffer_size=64Kread_rnd_buffer_size=256Ksort_buffer_size=256Kinnodb_additional_mem_pool_size=4Minnodb_flush_log_at_trx_commit=1innodb_log_buffer_size=2Minnodb_buffer_pool_size=159Minnodb_log_file_size=80Minnodb_thread_concurrency=8总结可以看出在MySQL 5.0里面,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中的配置也是比较关键的,良好的配置,能够有效的加速你的应用。如果不是很复杂的Web应用,非关键应用,还是可以继续考虑MyISAM的,这个具体情况可以自己斟酌。硬件配置CPU : AMD2500+ (1.8G)内存: 1G/现代硬盘: 80G/IDE软件配置OS : Windows XP SP2SE : PHP5.2.1DB : MySQL5.0.37Web: IIS6

===================================================

MyISAM TABLE Table is marked as crashed and should be repaired 问题三种修复方式:

1.进入MySQL bin目录 执行如下命令:(如:/usr/local/mysql/bin,查找命令find / -name 'mysql')

./myisamchk -c -r /data/vodlite3/t_report_asset_play.MYI

2.用Navicate工具的执行修复

方法:Table 右键-维护表-修复表-快速/扩展

3.表删除重建,或删掉执行脚本重建

===================================================

MySQL有关的命令:

查找命令:find / -name 'mysql'

more /etc/my.cnf

分享到:

2012-08-10 14:27

浏览 1237

分类:数据库

评论

mysql and常用引擎_MySQL两大常用存储引擎MyISAM,InnoDB的区别相关推荐

  1. mysql有那些存储引擎_MySQL有那哪些存储引擎

    实际我们在平时的开发中,经常会遇到的,在用SQLyog等工具创建表时,就有一个引擎项要你去选.如下图: Mysql的存储引擎有这么多种,实际我们在平时用的最多的莫过于InnoDB和MyISAM了. 所 ...

  2. mysql的存储引擎_Mysql数据库3种存储引擎有什么区别?

    展开全部 MySQL常见的三种存储e68a843231313335323631343130323136353331333366306561引擎为InnoDB.MyISAM和MEMORY.其区别体现在事 ...

  3. mysql 产品表 myisam好还是innodb好_mysql两种表存储结构myisam和innodb的性能比较测试...

    MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与 ...

  4. mysql 批量修改数据库存储引擎_mysql批量修改表存储引擎

    参数列表: [db] [db_host] [db_user] [db_passwd] #! /bin/bash if [ $1 ] then echo database $1; else echo ' ...

  5. MySQL两大常用存储引擎MyISAM,Inn…

    本文主要整理了MySQL两大常用的存储引擎MyISAM,InnoDB的六大常见区别,来源于Mysql手册以及互联网的资料 InnoDB与Myisam的六大区别 MyISAM InnoDB 构 成上的区 ...

  6. 3dmax:3dmax的软件两大常用工具之基本三维实体(标准基本体、扩展基本体、复合对象)之详细攻略

    3dmax:3dmax的软件两大常用工具之基本三维实体(标准基本体.扩展基本体.复合对象)之详细攻略 目录 基本三维实体 三维实体都有共同的参数设置 1.基本体 1.1.标准基本体

  7. 3dmax:3dmax的软件两大常用工具之基本二维图形(线、圆、椭圆、弧、多边形、星形、文本、螺旋线、截面、扩展样条线)之详细攻略

    3dmax:3dmax的软件两大常用工具之基本二维图形(线.圆.椭圆.弧.多边形.星形.文本.螺旋线.截面.扩展样条线)之详细攻略 导读:基本二维图形绘图时,当绘制超出视口范围,按住I键即可. 目录 ...

  8. 3dmax:3dmax的软件两大常用工具之基本三维实体(标准基本体、扩展基本体、复合对象)之详细攻略——daiding

    3dmax:3dmax的软件两大常用工具之基本三维实体(标准基本体.扩展基本体.复合对象)之详细攻略 目录 基本三维实体 三维实体都有共同的参数设置 1.基本体 1.1.标准基本体

  9. 适合mysql的网络存储_mysql 选择合适的存储引擎

    1 MyISAM:默认的MySQL 插件式存储引擎.如果应用是以读操作和插入操作为主, 只有很少的更新和删除操作,并且对事务的完整性.并发性要求不是很高,那么选择这个存 储引擎是非常适合的.MyISA ...

最新文章

  1. SWAP使用情况以及muma介绍
  2. navicat连接oracle无监听程序_一个Java程序员的成长历程(022天)
  3. 上传项目到gitHub,上传报错和删除gitHub上的项目
  4. PyTorch-图像分类演示
  5. oracle存储过程隐式函数,Oracle存储过程,函数。
  6. P4764-[CERC2014]Pork barrel【主席树,LCT,最小生成树】
  7. mysql 与 mycat集成读写分离
  8. Spring Cloud+Spring Boot高频面试题解析
  9. swiftui动画之tab自定义切换动画_骨骼动画制作|万彩骨骼大师
  10. Hibernate(六):映射一对多关联关系、双向一对多映射
  11. Swift - 图片去色 图片灰色显示
  12. word 任意页设置开始页码
  13. Hinton 2006 science 文章 RBM 预训练 AutoEncoder
  14. MT【108】线面角最小
  15. 安装elevation_mapping与traversability_estimation
  16. 深入学习IP数据报发送过程
  17. linux 三剑客 之 awk
  18. 关于windows10自动升级 电脑重启 蓝屏
  19. 【转】下载安装离线版维基百科
  20. SVG实例详解系列(一)(svg概述、位图和矢量图区别(图解)、SVG应用实例)

热门文章

  1. 汇编语言寄存器英文全名
  2. 社区不等于营销 —— 为什么我们要社区化,而不仅是市场化?
  3. 英语听说计算机考试演练专用,北京中考英语听说机考模拟演练
  4. 小米手机nfc能连电脑吗_基于ios平台小米手环5 NFC版体验报告
  5. 特殊纸张如何设置打印格式
  6. 微电子学与计算机期刊投稿模板,《微电子学与计算机》写作模板.doc
  7. 女生最爱说的33句双关语
  8. 用友U8案例教程应付管理后台配置
  9. Python爬虫:爬取我爱我家网二手房源信息
  10. 2019年全国计算机信息高新技术考试时间,2019年国家高新技术企业申报指南