暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql--------存储引擎介绍

Lord Lean Notes 2020-02-05
302

mysql数据库含有多种存储引擎,比如MyISAM、InnoDB、MEMORY等多个存储引擎,下面我们对这些存储引擎进行学习和认识。

MyISAM

使用MyISAM引擎建立的表都有三个文件:.frm文件存储的是表定义、.MYD文件存储的是表中的数据、.MYI文件存储的是索引文件。MyISAM存储引擎是不支持事务和不支持外键的,但是其查询速度很快,适用于select和insert操作为主的应用。
使用MyISAM引擎建立的表在运行过程中可能发生崩溃,所以每个MyISAM表都会有一个标志位来表明这个数据表在上次使用之后是否正常关闭,我们可以采用check table或者--myisam-recover等其他方法来检查表的完整性,并使用pepair table或myisamchk方法来修复一个损坏的表。注:使用myisamchk方法修复表时应保证没有服务器访问数据库的表。
MyISAM引擎所建立的表含有三种不同的存储格式:静态表、动态表、压缩表。静态表是默认的数据存储格式,静态表中的字段都是固定长度,这种存储方式具有存储迅速、容易缓存和容易恢复的特点。在存储数据时会把剩余长度以空格的方式填满,在获取数据时会把空格去除,这里需要注意的是当我们返回的数据是空格时,仍然会被处理掉。
InnoDB

InnoDB引擎是一个具有提交、回滚和崩溃恢复的存储引擎,InnoDB引擎提供了多个select语句可以访问同一条数据的特性,这保证了多用户部署和性能的提高。InnoDB也是支持外键的,在sql查询中你可以将InnoDB表和mysql的其他表混合使用。

InnoDB引擎具有多种事务隔离级别和行级锁机制,这些事务隔离级别和行级锁机制保证了InnoDB引擎在高并发的操作下可以保证数据的准确性。事务隔离级别有:可重复读、读已提交、读未提交、串行化读。行级锁机制含有共享锁、独占锁、间隙锁、意图共享/独占锁。

InnoDB存储引擎是默认支持B+树索引的,InnoDB引擎中的数据页可以组成一个双向链表,数据页中的数据按照主键记录形成一个单向链表。通过主键查询数据时采用的是二分查找法。若不根据主键查询,则按照顺序查询,先查询到数据所在的页记录,然后在数据页中查询记录。

InnoDB引擎是支持主键列自动增长和自动灾难恢复。

InnoDB引擎下如何进行优化?

InnoDB引擎下我们进行优化的方式可以针对具体问题具体优化。比如innodb_buffer_pool_size:此选项的作用是用来设置InnoDB引擎用来缓存它的数据和索引的内存缓冲区的大小。此值设置的越高,其访问表中数据访问磁盘I/O的次数越少。innodb_flush_log_at_trx_commit:当innodb_flush_log_at_trx_commit被 设置为0,日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作。当这个值为1(默认值)之时,在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到磁盘操作的 刷新。当设置为2之时,在每个提交,日志缓冲被写到文件,但不对日志文件做到磁盘操作的刷新。尽管如此,在对日志文件的刷新在值为2的情况也每秒发生一次。我们必须注意到,因为进程安排问题,每秒一次的 刷新不是100%保证每秒都发生。

MEMORY

MEMORY引擎拥有较快的响应时间,其是把数据存储在系统内存中,但是存储在系统内存中也是有缺陷的,当mysqld守护进程崩溃时,所有的数据都会丢失。并且存储的数据必须是定长的数据格式,所以不能使用BLOB和TEXT长度可变的数据类型,VARCHAR类型在mysql内部当作长度固定不变的CHAR类型,所以可以使用。

使用MEMORY引擎场景:1.目标数据较小,并且被频繁使用。可以采用max_heap_table_size选项控制MEMORY表的大小。2.如果数据是立即可用并且是临时的,可以存放在内存表中。3.存储在MEMORY表中的数据如果丢失之后,不对应用服务产生影响。

MEMORY引擎是支持B树索引和散列索引的。并且B树索引是优于散列索引的。

这里只对这三种存储引擎做了简单说明,其他的存储引擎便不做介绍。
文章转载自Lord Lean Notes,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论