Mysql存储引擎Myisam小结

Mysql存储引擎Myisam小结,第1张

    myisam在mysql5.5之前是默认存储引擎,从5.5开始mysql的默认存储引擎为innodb.目前mysql版本myisam仍然有广泛的应用.mysql的一些系统表和临时表存储引擎仍然使用的myisam.这里的临时表指的是在查询过程中对查询的数据进行排序,分组等 *** 作,数据量超过一定数量时,由查询优化器建立的临时表.

myisam每个表都有三个文件组成:

.frm 表结构描述

.MYD 存储数据

.MYI 存储索引

myisam存储引擎的锁级别为表级锁,myisam为表级读共享写独占锁.myisam读并不会完全阻塞写,myisam允许在读的同时在表的后面追加对应的数据.concurrent_insert控制对应的并发性.

concurrent_insert可以设置为以下3个值:

在5.0之前,myisam只支持文件大小为4G的文件,再次之后支持256TB大小的文件.如果表要大于4G,需要设置MAX_ROWS和AVG_ROW_LENGTH的值.

相对于innodb存储引擎来说myisam占用的表空间更加少。myisam支持通过myisampack对单个表做进一步压缩。通过myisampack进行压缩,myisampack能过将数据压缩40%~70%。但是通过myisampack压缩后的数据该表将变成只读。压缩后需要对该表进行检查,使用工具myisamchk。

myisam存储引擎不支持事务。update后无需commit将会自动提交,也无法回滚。正是如此,myisam没有redo log以及undo log文件。在迁移数据对应的表的时候,只需要将对应的表拷贝到目标机器上就可以使用了。但是由于没有redo log和undo log,这样容易造成表损坏。

通过check table tablename和repair table tablename两条命令表进行修护。

myisam含有一些空间函数。一些地理信息系统的空间应用需要使用这种类型的存储引擎。

1、MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。

2、InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE *** 作,则应该使用InnoDB,这样可以提高多用户并发 *** 作的性能。

扩展资料:

MyISAM和InnoDB主要区别:

1、MyISAM是非事务安全型的,而InnoDB是事务安全型的。

2、MyISAM锁的粒度是表级,而InnoDB支持行级锁定。

3、MyISAM支持全文类型索引,而InnoDB不支持全文索引。

4、MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。

5、MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少麻烦。

6、InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表。

参考资料来源:百度百科—— MyISAM 

参考资料来源:百度百科—— InnoDB

MySQL数据库有多种存储引擎:比如:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE等等,最常见的也就是MyISAM和InnoDB了,下面主要讲解下MyISAM和InnoDB两种mysql数据库存储引擎的区别。

MyISAM引擎是一种非事务性的引擎,提供高速存储和检索,以及全文搜索能力,适合数据仓库等查询频繁的应用。MyISAM中,一个table实际保存为三个文件,.frm存储表定义,.MYD存储数据,.MYI存储索引。MyISAM在所有MySQL配置里被支持,它是默认的存储引擎,除非你配置MySQL默认使用另外一个引擎。

MySQL服务器中的其他非事务性存储引擎(如MyISAM)遵从不同的数据完整性范例,称之为“原子 *** 作”。按照事务术语,MyISAM表总能高效地工作在AUTOCOMMIT=1模式下。原子 *** 作通常能提供可比较的完整性以及更好的性能。与经过优化调整的最快的事务性表相比,它的速度快3~5倍。由于MySQL服务器支持两种范例,因而你能决定是否利用原子 *** 作的速度更好地服务于你的应用程序,或使用事务特性。该选择可按表进行。

InnoDB则是一种支持事务的引擎。给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。所以的数据存储在一个或者多个数据文件中,支持类似于Oracle的锁机制。一般在OLTP应用中使用较广泛。如果没有指定InnoDB配置选项,MySQL将在MySQL数据目录下创建一个名为ibdata1的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的日志文件。

InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。

InnoDB是为处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。InnoDB存储引擎被完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。

InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件。InnoDB表可以是任何尺寸,即使在文件尺寸被限制为2GB的 *** 作系统上。InnoDB也默认被包括在所有MySQL 5.1二进制分发版里。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8636170.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存