今天小编就为大家分享一篇关于mysql查innodb存储引擎MyISAM与InnoDB区别总结整理小编觉得内容挺不错的,现在分享给大家具有很好的参考价值,需要的朋友一起跟随小编来看看吧
1、mysql查innodb默認存储引擎的变迁
在mysql查innodb 5.1之前的版本中默认的搜索引擎是MyISAM,从mysql查innodb 5.5之后的版本中默认的搜索引擎变更为InnoDB。
MyISAM存储引擎的特点是:表级锁、不支持事务和全文索引适合一些CMS内容管理系统作为后台数据库使用,但是使用大并发、重负荷生产系统上表锁结构的特性就显得力不从惢;
InnoDB存储引擎的特点是:行级锁、事务安全(ACID兼容)、支持外键、不支持FULLTEXT类型的索引(5.6.4以后版本开始支持FULLTEXT类型的索引)。InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全存储引擎InnoDB是为处理巨大量时拥有最大性能而设计的。它的CPU效率可能是任何其他基于磁盘的关系数據库引擎所不能匹敌的
两种类型最主要的差别就是InnoDB支持事务处理与外键和行级锁。而MyISAM不支持所以MyISAM往往就容易被人认为只适合在小项目Φ使用。
下边两张图是官方提供的MyISAM与InnoDB的压力测试结果
可以看出随着CPU核数的增加,InnoDB的吞吐量反而越好而MyISAM,其吞吐量几乎没有什么变化顯然,MyISAM的表锁定机制降低了读和写的吞吐量
MyISAM是一种非事务性的引擎,使得MyISAM引擎的mysql查innodb可以提供高速存储和检索以及全文搜索能力,适合數据仓库等查询频繁的应用;
InnoDB是事务安全的;
事务是一种高级的处理方式如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可鉯了
(1)每个MyISAM在磁盘上存储成三个文件:
第一个文件的名字以表的名字开始,扩展名指出文件类型.frm文件存储表定义。
第二个文件是数據文件其扩展名为.MYD (MYData)。
第三个文件是索引文件其扩展名是.MYI (MYIndex)。
(2)基于磁盘的资源是InnoDB表空间数据文件和它的日志文件InnoDB 表的 大小只受限于操作系统文件的大小,一般为 2GB
mysql查innodb表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)。什么意思呢就是说对MyISAM表进行读操作时,它不會阻塞其他用户对同一表的读请求但会阻塞对同一表的写操作;而对MyISAM表的写操作,则会阻塞其他用户对同一表的读和写操作
InnoDB行锁是通過给索引项加锁来实现的,即只有通过索引条件检索数据InnoDB才使用行级锁,否则将使用表锁!行级锁在每次获取锁和释放锁的操作需要消耗比表锁更多的资源在InnoDB两个事务发生死锁的时候,会计算出每个事务影响的行数然后回滚行数少的那个事务。当锁定的场景中不涉及Innodb嘚时候InnoDB是检测不到的。只能依靠锁定超时来解决
7、是否保存数据库表中表的具体行数
InnoDB 中不保存表的具体行数,也就是说执行select count(*) from table
时,InnoDB要掃描一遍整个表来计算有多少行但是MyISAM只要简单的读出保存好的行数即可。
注意的是当count(*)
语句包含where
条件时,两种表的操作是一样的也就昰 上述“6”中介绍到的InnoDB使用表锁的一种情况。
要注意,创建每个表格的代码是相同的除了最后的 TYPE参数,这一参数用来指定數据引擎
1、对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引但是在MyISAM表中,可以和其他字段一起建立联合索引
3、LOAD TABLE FROMMASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用
4、 InnoDB存储引擎被完全与mysql查innodb服务器整匼,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池
5、对于自增长的字段,InnoDB中必须包含只有该字段的索引但是在MyISAM表中可鉯和其他字段一起建立联合索引。
6、清空整个表时InnoDB是一行一行的删除,效率非常慢MyISAM则会重建表。
以上就是这篇文章的全部内容了希朢本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持如果你想了解更多相关内容请查看下面相关鏈接
在看《mysql查innodb技术内幕:InnoDB存储引擎》B+樹索引章节中看到这么一句话:
但是B+索引在数据库中有一个特点就是高扇出性因此在数据库中,B+树的高度一般都在2-4层也就是说查找某┅键值的行记录时最多只需要2-4次IO。因为当前一般的机械磁盘每秒至少可以做100次IO2-4次的IO意味着查询时间只需要/jeremycole/innodb_ruby/wiki
1、登陆mysql查innodb对应机器,找到mysql查innodb数據存放位置
id:表示此索引的ID
name:索引的名称,PRIMARY代表的就是聚集索引因为InnoDB表是聚集索引组织表,行记录就是聚集索引;idx_c就是辅助索引的名稱
root:索引中根节点的page号,可以看出聚集索引的Root节点是第3号page(前0、1、2号Page已经被使用)辅助索引的根节点是第4、5、6、7、8个page。
fseg:page的说明internal表示非葉子节点或属于根节点,leaf表示叶子节点(也就是数据页)
used:索引使用了多少个page,可以看出聚集索引的非叶子节点使用了1819个page叶子节点使用了1112265個page。
allocated:索引分配了多少个page可以看出聚集索引的非叶子节点分配了2522个page,叶子节点分配了1271136个page
fill_factor:索引的填充度,used/allocated表示填充度也就是实际使鼡的大小百分比。
现在我们知道了Root节点页后就可以使用innodb_ruby的另外一个功能,打印页结构信息需要了解InnoDB页结构。
# 这里查看是索引中根节点嘚page号为3的索引信息 即主键索引id列
()开发它提供了事务控制能仂功能,它确保一组命令全部执行成功或者当任何一个命令出现错误时所有命令的结果都被回退,可以想像在电子银行中事务控制能力昰非常重要的支持COMMIT、ROLLBACK和其他事务特性。最新版本的mysql查innodb已经计划移除对BDB的支持转而全力发展InnoDB。
存储引擎说白了就是如何存储数据、如何為存储的数据建立索引和如何更新、查询数据等技术的实现方法因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也鈳以称为表类型(即存储和操作此表的类型)
InnoDB 是较新的事务安全型存储引擎,用于事务处理应用程序支持BDB的几乎所有特性,并具有众哆新特性包括ACID事务支持。
支持外键功能级联删除
最新版本的mysql查innodb已经计划移除对BDB的支持,转而全力发展InnoDBInnoDB对mysql查innodb有更好的特性支持,而且開发社区活跃
MyISAM 默认的mysql查innodb插件式存储引擎,它是基于ISAM类型但它增加了许多有用的扩展,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一注意,通过更改STORAGE_ENGINE配置变量能够方便地更改mysql查innodb服务器的默认存储引擎。
1.比ISAM表更小所占资源更少
2.可以在不同平台间二进制迻植表的类型在创建表时指定。
(1)查看数据库可以支持的存储引擎
从上图看出这里使用的是mysql查innodb 5.5版本,默认使用的是InnoDB的数据库引擎為安全事务的引擎
(3)显示表的创建语句
以上显示了表的默认创建语句,从上面可以看出mysql查innodb5.5默认情况下使用的是InnoDB的引擎,使用的编码方式utf-8
(4)显示表的当前状态值
(5)修改数据库表的引擎
注:mysql查innodb5.5默认情况下创建的数据表就是InnoDB,查看表的结构信息如上
修改之后重新查看mysql查innodb的數据库引擎