数据库引擎 MyISAM InnoDB 不同及安装

WebServer 林涛 846℃ 0评论

最近在处理4kw+的数据量,虽然每条数据都不大,但是这么多数据都放到一起也不是个小数,都上了G了,于是涉及到了innodb和myisam 引擎,这里就把碰到的问题都汇总一下,便于和我一样不熟悉的朋友学习一下。

INNODB 引擎:

如果在sql操作时候出现错误:

MySQL Server Error:
The ‘InnoDB’ feature is disabled; you need MySQL built with ‘InnoDB’ to have it working

则应该先检查mysql是否支持innodb引擎:

在mysql中输入SHOW variables like “have_%”;查看,显示如下:

(在 mysql 下输入的每条语句都必须以”;”结尾)

linux 查看innodb 命令

注意到:“have_innodb    NO” 了吗?这说明mysql 还不 支持innodb引擎。

如果已经安装了innodb:

找到 my.cnf ,修改:

default-storage-engine =  InnoDB ,

skip-innodb    前面的注释和空格去掉,

保存重启mysql,保存 然后 重启mysql ,基本上这样就能看到InnoDB了。

如果没有安装:

首先要确定在mysql的’plugin_dir’下有ha_innodb_plugin.so和ha_innodb.so两个文件,查询’plugin_dir’的路径可以用以下命令:

mysql>show variables like  ‘plugin_dir’;

查寻plugin_dir命令

(如果没有找到 则需要把它们(ha_innodb_plugin.so和ha_innodb.so)拷贝到mysql的plugin目录中)
接下来就是在mysql命令行安装一下:

mysql>install plugin innodb soname ‘ha_innodb.so’;

安装innodb

待提示完成后则大功告成:

使用  mysql>show engines; 查看:

mysql安装innodb

 

INNODB是事务安全的.它与BDB类型具有相同的特性,它们还支持外键.InnoDB表格速度很快.具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它.如果你的数据执行大量的insert或update,出于性能方面的考虑,应该使用InnoDB表。InnoDB 的设计目标是处理大容量数据时最大化性能,它的 CPU 利用率是其他所有基于磁盘的关系数据库引擎中最有效率的。

InnoDB 有它自己的缓冲池,能缓冲数据和索引,InnoDB 还把数据和索引存放在表空间里面,可能包含好几个文件,这和 MyISAM 表完全不同,在 MyISAM 中,表被存放在单独的文件中,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB。

 

MyISAM 引擎:

是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method 的缩写,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具. MyISAM表格可以被压缩,而且它们支持全文搜索.它们不是事务安全的,而且也不支持外键。如果事物回滚将造成不完全回滚,不具有原子性。如果执行大量的select,MyISAM是更好的选择。

 

区别:

◆基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。
MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,
而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%”

两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。

 

补充,索引类型:

PRIMARY, INDEX, UNIQUE 这3种是一类
PRIMARY  主键。 就是 唯一 且 不能为空。
INDEX    索引,普通的
UNIQUE   唯一索引。 不允许有重复。
FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。

如需转载请注明: 转载自26点的博客

本文链接地址: 数据库引擎 MyISAM InnoDB 不同及安装

转载请注明:26点的博客 » 数据库引擎 MyISAM InnoDB 不同及安装

喜欢 (0)
发表我的评论
取消评论

表情
(1)个小伙伴在吐槽
  1. 谢谢分享
    冶金行业报告2013-06-24 11:15 回复