• 专注于网站建设,网络推广,关键词优化,SEO优化,专业的网站建设开发团队!
首页 > IT技术 > MySQL > 内容

InnoDB与MyISAM的六大区别

2015-07-09 23:05:40   来源:叶景网络
    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%”
叶景网络,网络推广,网站建设
特别推荐RECOMMEND
搜索引擎网站关键词seo优化的意义
视频推广怎么做
网站seo优化怎么做关键词排上首页?
SEO介绍什么叫搜索引擎网站关键词优化
seo优化怎样做提升关键词排名
热点图文Hot
MYSQL中导入大小超过2M的数据库文件解决办法 MYSQL中导入大小超
从MySQL中获得数据表auto_increment值的方法 从MySQL中获得数据
MySQL 错误1418 的原因分析及解决方法 MySQL 错误1418
MySQL group by 排序问题 MySQL group by 排序问题
关注排行RANKING
1

MYSQL中导入大小超过2M的数据库文件...

MYSQL中导入大小超过2M的数据库文件解决办法 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网...

2

从MySQL中获得数据表auto_increment值的方法

从MySQL中获得数据表auto_increment值的方法 在插入一行数据前就想要知道将要产生的id。比如说想用来命名上传的文件。如果不事先...

3

MySQL 错误1418 的原因分析及解决方法

MySQL 错误1418 的原因分析及解决方法 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网...

4

MySQL group by 排序问题

MySQL group by 排序问题 id 为 自动增长字段, tid为该回复的主题帖子的id(外键关联), subject 为回复...

5

MySQL-bin导致阿里云LNMP20G系统盘...

MySQL-bin导致阿里云LNMP20G系统盘不够用处理方法 在MySQL数据库中,mysql-bin 000001、mysql- bin 000002等文件是数据库的操作日志,...

6

LNMP更改网站文件和MySQL数据库的存放目录

LNMP更改网站文件和MySQL数据库的存放目录 购买阿里云服务器,一般建议买一个数据盘,也就是系统盘和数据盘分开,将网站文...

7

MySQL无法启动ERROR! MySQL is r...

MySQL无法启动ERROR! MySQL is running but PID file could not be found ? 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领...

8

LNMP关闭MySQL日志保护硬盘空间

LNMP关闭MySQL日志保护硬盘空间 今天发现VPS硬盘居然快满了。第一反应是:肯定是某个东西的日志文件造成的,因为以前在W...

9

MySQL数据库批量修改表前缀的方法

MySQL数据库批量修改表前缀的方法 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网...