1.5 MySQL的存储引擎

每种存储引擎对表数据和案引的存储方式有所不同。但表定义是由MySQL 服务器独立处理的。

mytable.frm即为表定义。

 

检查数据表所使用的存储引擎:

show table status like 'user' \G;

row_format:

行格式。对于MyISAM表,这可能是 Dynamic、Fixed 或Compressed

动态行,行长度可变,因为它们包含有可变长的字段,例如 VARCHAR或 BLOB 类型字段。

固定行,行长度相同,由不可变长的字段组成,例如 CHAR和 INTEGER字段。

压缩行,只存在于压缩表。

 

rows:表中的行数。对于非事务性表,这个值是精确的。对于事务性表,这通常是个估算值。

 

avg_row_length:平均每行包括的字节数。

 

data_length:整个表的数据量,单位字节。

 

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

 

index_length:索引数据占用磁盘空间的大小。

 

data_free

对于 MyISAM 表,表示已分配,但现在未被使用的空间。这部分空间包含了以前被删除的行,这些空间

可以用于以后的INSERT语句。

 

collation:指本表中的默认字符集和字符列排序规则(Collation)。

 

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

 

MyISAM作为 MySQL 的默认存储引擎,包括全文检索、压缩、空间函数

MyISAM不支持事务和行级锁

MylSAM将每个表存储成两个文件∶数据文件和素引文件。两个文件的扩展名分别为.MYD 和.MYI

因此,对于MyISAM或者InnoDB等其他存储引擎来说,都是会有frm表结构文件的

对于MyISAM表来说,拷贝它的MYD、MYI和frm文件到其他服务器,是能够直接使用的

MylSAM表可以包含动态行(Dynamic Row)和静态行(Static Row,即固定长度行)

每个字段是静态的还是动态的,是根据表定义来的,如果字段是char,则是静态行,如果字段是varchar,则是动态行。

MyISAM表的可容纳的行总数,一般只受限于数据库服务器的可用磁盘空间大小,以及操作系统允许创建的最大文件大小。

如果想改变 MyISAM 表上的指针大小(调高或调低),必须在表创建选项 MAX_Rows 和AVG_ROW_LENGTH中,指定相关的值,这些选项代表了用户预计使用的表大小。

创建表之后,用户也可以通过 ALTER TABLE 语句改变指针的大小,不过这将引发整个表和所有相关紫引的重写,而这可能会耗费相当长的时间

MylSAM对整张表进行加锁,而不是行。

MySQL支持对 MyISAM 表的自动检查和自动修复

用户可以使用 CHECK TABLE mytable和 REPAIR TABLE mytable 命令,检查表中的错误,并修复错误。当服务器离线时,也可以使用 myisamchk 命令行工具检查和修复表。

在MylSAM表中,用户可以基于 BLOB或TEXT 类型列的前500个字符,创建相关索引。

 

延迟更新索引

使用表创建选项 DELAY_KEY_WRITE 创建的 MyISAM表,在SQL语句结束后,不会将索引的改变数据写人磁盘、

而是在内存的键缓冲区(In-memory Key Buffer)中缓存索引改变数据。

它只会在清理缓冲区,或者关闭表时,才将索引块转储到磁盘

对于数据经常改变,并且使用频繁的表,这种模式大大提高了表的处理性能。

如果服务器或系统筋溃,索引将肯定损坏,并需要修复。

用户可以使用脚本,如运行myisamchk 工具在重启服务器前进行修复。也可以使用自动恢复(Automatic Recovery)选项进行像复。

不管有没有设置delay key write,都最好加上一个脚本,防止服务器意外崩溃。如果真的崩溃了,那么在启动服务器前,都会第一时间执行修复脚本,这样才能保证索引正常。

延迟更新索引特性可以被全局配置,也可以为个别表单独配置

假设设置了延迟更新索引选项,当我们将上面的 "这是无眠海边的浪花" 改成"这是罗刹海边的血水"时,磁盘中的索引块并不会立即更新。

myisampack 实用工具,可以对表进行压缩(或"打包")。压缩表一般是不能改变的。

 

Merge 引擎是MyISAM的变种。合并表是指将几个相同的 MylSAM表合并为一个虚表。它对于 MySQL 记录日志或数据仓库应用特别有用。

 

InnoDB引擎

InnoDB 专为事务处理设计的一款存储引擎,特别是用于处理大量短期(Short-lived)事务,短期事务是指一般能正常完成,不需要回滚的事务

InnoDB也可以用在非事务性存储应用中,因为它的性能很好,同时还具备崩溃后的恢复功能。

InnoDB 将所有数据共同存储在一个或几个数据文件中,这种数据文件一般称之为表空间(Tablespace)

表空间内,InoDB 自我管理一切数据。

lnnoDB 也支持将每个表和相关索引存储为单独的分离文件

InnoDB使用MVCC机制获取高并发性能,并且实现所有四个标准隔离级。它的默认隔离级为REPEATABLEREAD。

InnoDB还不能根据排序(Sorting)建立索引,而 MyISAM支持。因此,当 InnoDB加载数据和创建索引时,要比MyISAM慢很多

任何改变 InnoDB 表结构的操作,会导致整个表的重建,包括重建所有索引。

强烈建议阅读 MySQL 手册中的"InnoDB事务模型和加锁"。

 

posted @ 2022-05-22 13:17  道霖  阅读(83)  评论(0编辑  收藏  举报