当前位置:七道奇文章资讯安全技术网络技术
日期:2010-09-10 00:06:00  来源:本站整理

mysql数据据存储引擎InnoDB和MyISAM的上风及辨别[网络技术]

赞助商链接



  本文“mysql数据据存储引擎InnoDB和MyISAM的上风及辨别[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

  MyISAM:这个是默许范例,它是基于传统的ISAM范例,ISAM是Indexed Sequential Access Method (有索引的次序拜候办法) 的缩写,它是存储记录和文件的尺度办法.与其他存储引擎对比,MyISAM具有查抄和修复表格的大大都工具. MyISAM表格可以被紧缩,并且它们支持全文搜索.它们不是事件安全的,并且也不支持外键.假如事物回滚将造成不完好回滚,不具有原子性.假如履行大量的SELECT,MyISAM是更好的挑选.

  InnoDB:这种范例是事件安全的.它与BDB范例具有相同的特点,它们还支持外键.InnoDB表格速度很快.具有比BDB还丰富的特点,因此假如需求一个事件安全的存储引擎,倡议利用它.假如你的数据履行大量的INSERT或UPDATE,出于性能方面的考虑,应当利用InnoDB表,

  关于支持事物的InnoDB范例的标,影响速度的主要缘由是AUTOCOMMIT默许设置是翻开的,并且程序没有显式调用BEGIN 开始事件,招致每插入一条都自动Commit,严重影响了速度.可以在履行sql前调用begin,多条sql形成一个事物(即便autocommit翻开也可以),将大大提高性能.

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

  InnoDB和MyISAM是在利用MySQL最常用的两个表范例,各有优缺陷,视具体利用而定.下面是已知的二者之间的差别,仅供参考.

  innodb

  InnoDB 给 MySQL 供应了具有事件(commit)、回滚(rollback)和崩溃修复本领(crash recovery capabilities)的事件安全(transaction-safe (ACID compliant))型表.InnoDB 供应了行锁(locking on row level),供应与 Oracle 范例一致的不加锁读取(non-locking read in SELECTs).这些特点均提高了多用户并发操作的性能表现.在InnoDB表中不需求扩大锁定(lock escalation),因为 InnoDB 的列锁定(row level locks)适合非常小的空间.InnoDB 是 MySQL 上第一个供应外键约束(FOREIGN KEY constraints)的表引擎.

  InnoDB 的计划目标是处理大容量数据库系统,它的 CPU 操纵率是别的基于磁盘的关系数据库引擎所不能比的.在技术上,InnoDB 是一套放在 MySQL 后台的完好数据库系统,InnoDB 在主内存中成立其专用的缓冲池用于高速缓冲数据和索引. InnoDB 把数据和索引存放在表空间里,大概包含多个文件,这与别的的不一样,举例来说,在 MyISAM 中,表被存放在单独的文件中.InnoDB 表的大小只受限于操作系统的文件大小,普通为 2 GB.

  InnoDB全部的表都保存在同一个数据文件 ibdata1 中(也大概是多个文件,大概是独立的表空间文件),相对来说对比不好备份,免费的筹划可以是拷贝数据文件、备份 binlog,大概用 mysqldump.

  MyISAM

  MyISAM 是MySQL缺省存贮引擎 .

  每张MyISAM 表被存放在三个文件 .frm 文件存放表格定义. 数据文件是MYD (MYData) . 索引文件是MYI (MYIndex) 引伸.

  因为MyISAM相对简单所以在效率上要优于InnoDB..小型利用利用MyISAM是不错的挑选.

  MyISAM表是保存成文件的情势,在跨平台的数据转移中利用MyISAM存储会省去不少的麻烦

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

  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的性能上风.

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

  以下是InnoDB和MyISAM的一些接洽和辨别!

  1. 4.0以上mysqld都支持事件,包含非max版本.3.23的需求max版本mysqld才能支持事件.

  2. 成立表时假如不指定type则默许为myisam,不支持事件.

  可以用 show create table tablename 号令看表的范例.

  2.1 对不支持事件的表做start/commit操作没有任何效果,在履行commit前已经提交,测试:

  履行一个msyql:

  use test;

  drop table if exists tn;

  create table tn (a varchar(10)) type=myisam;

  drop table if exists ty;

  create table ty (a varchar(10)) type=innodb;

  begin;

  insert into tn values('a');

  insert into ty values('a');

  select * from tn;

  select * from ty;

  都能看到一条记录

  履行另一个mysql:

  use test;

  select * from tn;

  select * from ty;

  只有tn能看到一条记录

  然后在另一边

  commit;

  才都能看到记录.

  3. 可以履行以下号令来切换非事件表到事件(数据不会丧失),innodb表比myisam表更安全:

  alter table tablename type=innodb;

  3.1 innodb表不能用repair table号令和myisamchk -r table_name

  但可以用check table,以及mysqlcheck [OPTIONS] database [tables]

  4. 启动mysql数据库的号令行中增添了以下参数可以使新公布的mysql数据表都默许为利用事件(

  只影响到create语句.)

  --default-table-type=InnoDB

  测试号令:

  use test;

  drop table if exists tn;

  create table tn (a varchar(10));

  show create table tn;

  5. 暂时改变默许表范例可以用:

  set table_type=InnoDB;

  show variables like 'table_type';

  或:

  c:\mysql\bin\mysqld-max-nt --standalone --default-table-type=InnoDB


  以上是“mysql数据据存储引擎InnoDB和MyISAM的上风及辨别[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Windows 搭配 IIS7 PHP MySQL 环境
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • mysql数据库插入速度和读取速度的调整记录
  • MySQL Order By索引优化办法
  • MySQL Order By用法分享
  • mysql #1062 –Duplicate entry ''1'' for key ''PRIMARY''
  • MySQL Order By Rand()效率解析
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .