MySQL攻略

MySQL 的存储引擎

2019-10-12  本文已影响0人  Matrixchan

数据库存储引擎storage engine,又称数据表处理器,它是数据库底层软件的组织。数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。

数据表在硬盘上的存储方式

在文件系统中,MySQL将每个数据库 (也称schema)保存为数据目录下的一个子目录。创建表时,MySQL会在数据库子目录下创建一个与表同名的.frm文件保存表的定义。

MySQL使用文件系统的目录来保存数据库和表的定义,大小写敏感性与具体的操作系统的文件系统相关。在Windows中,大小写不敏感;而在Uinux/Linux中则是大小写敏感。

不同的储存引擎保存数据和索引的方式是不同的,但表的定义在MySQL服务器层是统一处理的。

查看有哪些存储引擎可用

mysql> SHOW ENGINES\G;
show_engine.jpg

查询默认存储引擎

mysql> SHOW VARIABLES LIKE 'default_storage_engine%';
show_default_engine.jpg

查询数据表的相关信息

mysql> SHOW TABLE STATUS LIKE 'user'\G;
show_table_status.jpg

下面简单介绍每一行的含义:

Name: 表名。

Engine:表的存储引擎类型。

Row_format:行的格式。可选值有 Dynamic、Fixed或者Compressed。

Rows:表中的行数。

Avg_row_length:平均每行包含的字节数。

Data_length:整个表的大小(单位:字节)。

Max_data_length: 表可以容纳的最大数据量

Index_length:索引的大小(单位:字节)。

Data_free: 对于MyISAM表,表示已经分配但目前没有使用的空间。这部分空间包括之前删除的行,以及后续可 以被INSERT利用到的空间。

Auto_increment:下一个Auto_increment的值。

Create_time: 表的创建时间。

Update_time:表数据的最后修改时间。

Check_time: 使用 CHECK TABLEmyisamchk工具最后一次检查表的时间。

Collation: 表的默认字符集和字符排序规则。

Checksum: 如果启用,则对整个表的内容计算时的校验和。

Create_options:指表创建时的其他所有选项。

Comment:包含了其他额外信息,对于MyISAM引擎,保存的是表创建时带的注释;如果表使用的是innoDB引 擎 ,则保存的是表空间的剩余空间信息;如果是一个视图,则包含了“VIEW”的文本字样。

InnoDB存储引擎

InnoDB是MySQL的默认事务引擎,也是目前最重要、使用最广泛的存储引擎。它被设计用来处理大量的短期事务(大部分情况能正常提交,很少被回滚)。同时,InnoDB的性能和崩溃自动恢复特性使得它在非事务型储存的需求中也被广泛使用。若非有特别原因需要使用其他的储存引擎,建议优先考虑InnoDB引擎。

概述

InnoDB的数据存储在表空间(tablespace)中,表空间是由一系列的数据文件构成,类似一个虚拟的文件系统,它存储和管理所有InnoDB数据表内容。

InnoDB 采用MVCC支持高并发,且实现了四个标准的隔离级别。其默认级别是REPEATABLE READ,且通过间隙锁策略防止幻读的出现。间隙锁使得InnoDB不仅锁定查询涉及的行,还会对索引中的间隙进行锁定,防止幻影行的插入。

InnoDB表基于聚蔟索引建立的,其索引结构和MySQL的其他存储引擎有很大不同,聚蔟索引对主键查询有很高的性能。它的二级索引必须包含主键列,所以主键很大的话,其他索引也会很大。因此若表上的索引比较多,主键应当尽可能小。

四种隔离级别说明

隔离级别 脏读(Dirty Read) 不可重复读(NonRepeatable Read) 幻读(Phantom Read)
未提交读(Read uncommitted) 可能 可能 可能
已提交读(Read committed) 不可能 可能 可能
可重复读(Repeatable read) 不可能 不可能 可能
可串行化(SERIALIZABLE) 不可能 不可能 不可能

提供的功能

MyISAM 存储引擎

MyISAM是MySQL 5.1 以及之前版本的默认存储引擎,它提供了全文检索、压缩、空间压缩函数等特性。MyISAM不支持事务和行级锁,崩溃后无法安全恢复。如果对于只读数据,或者表比较小,可以忍受修复操作,也可以考虑存储引擎选用MyISAM。

存储

MyISAM将表存储在两个文件中:数据文件和索引文件,分别以.MYD和.MYI为扩展名。

MyISAM表可以包含动态或者静态(长度固定)行。

MyISAM表的存储记录数受限于可用的磁盘空间或者操作系统中单个文件的最大尺寸。

特性

加锁与并发

MyISAM对整表加锁,而不是针对行。读取时会对需要读到的所有表加共享锁,写入时会对表加排他锁。若表有读取查询时,可以往表中插入新的记录,称之为并发插入。

修复

MySQL可手工或者自动执行检查和修复的操作。执行表的修复可能会导致一些数据的丢失,而且过程非常 慢。

可通过CHECK TABLE mytable检查表的错误,如果有错误可通过REPAIR TABLE mytable命令修复。如果MySQL服务器已经关闭,可以使用myisamchk命令进行检查和修复的操作。

索引特性

支持全文检索,这是一种基于分词创建的索引,可以支持复杂的查询。

延迟更新索引键

创建MyISAM表时若指定了DELAY_KEY_WRITE选项,在每次修改执行完成时,不会立刻将修改的索引写入磁盘,而是写到内存中的键缓冲区,在清理缓冲区或者关闭表的时候才会把对应的索引块写入到磁盘。此方式极大提升了写入性能,但是在数据库或者主机崩溃时会造成索引损坏,需要执行修复操作。延迟更新索引键可以在全局设置,也可以为单表设置。

MyISAM压缩表

MyISAM压缩表适合那些创建并导入数据后,不再进行修改操作的数据表。可以使用myisampack对MyISAM表进行压缩,压缩后不能修改,除非先将表解压后修改数据,然后再压缩。压缩后,减少了磁盘空间占用,因此减少了磁盘I/O,从而提升查询性能。压缩表支持可读索引。

MyISAM 性能

MyISAM最典型的性能问题是表锁的问题,如果发现所有查询都长期处于“Locked”状态,那么就表锁的问题。


MySQL内建的其他存储引擎简介

Archive 引擎

Archive只支持INSERT和SELECT操作,它会缓存所有的写并对插入的行进行行压缩,因此它比MyISAM表的磁盘I/O 更少。Archive引擎每次SELECT查询需要执行全表扫描,它适合日志和数据采集类应用,因为这类应用做数据分析时候需要全表扫描。同时也适合需要更快INSERT操作的场合下使用。

Archive支持行级锁和专用缓冲区,可以实现高并发插入。在一个查询开始直到返回表中存在的所有行数之前,它会阻止其他SELECT执行,以实现读一致性。Archive在操作批量插入时,在完成前对读操作是不可见,此机制模仿了事务和MVCC的一些特性,但是它不是一个事务型引擎,而是一个针对高速插入和压缩做了优化的简单引擎。

Blackhole引擎

Blackhole引擎没有实现任何存储机制,它会丢弃所有插入的数据,不做任何保存。但是服务器会记录Blackhole表的日志,所以它适合用于复制数据到备库,或简单地记录到日志。

CSV引擎

CSV引擎可以将CSV文件作为MySQL的表来处理,但它不支持索引。CSV引擎可以在数据库运行适合拷入或拷出文件,可以把Excel等电子表格中的数据存储为CSV文件,然后复制到M一SQL数据目录下,就能在MySQL中打开。

Federated存储引擎

Federated引擎是访问其他MySQL服务器饿一个代理,它创建一个到远程MySQL服务器的客户端连接,并将查询传输到远程服务器执行,然后提取或者发送需要的数据。

MERGE储存引擎

Memory储存引擎

该引擎把数据表保存在内存中,数据表具有固定不变的数据行,因此它的检索非常快,但是服务器断电时,表的内容也随之消失。如果需要快速访问数据,而且这些数据不会被修改,重启后丢失也没关系,可以考虑使用Memory存储引擎。

特点:

适合使用的场景:

Falcon储存引擎

NDB储存引擎

该引擎是MySQL的集群储存引擎。

命令总结

查看有哪些存储引擎可用

mysql> SHOW ENGINES\G;

查询默认存储引擎

mysql> SHOW VARIABLES LIKE 'default_storage_engine%';

查询数据表的相关信息

mysql> SHOW TABLE STATUS LIKE 'user'\G;
上一篇 下一篇

猜你喜欢

热点阅读