mysql myisammaxsortfilesize_MySQL 之 MyISAM存储引擎

MyISAM存储引擎

每张表在磁盘上的存储分为三个文件:存放元数据的.frm文件,存放表记录数据的.MYD文件,存放索引数据的.MYI为索引文件。

MyISAM的一些特点

·只对索引进行缓存(Key Cache),数据文件使用操作系统cache,当索引数据大于分配的key buffer时也使用操作系统cache索引

·单独保存表的行数,因此做count(*)时不需要全表扫描

·不是事务安全的,不支持外键

·表级锁定

·每张表一个数据文件,备份时可以直接复制,恢复时也可以直接覆盖,操作方便

·使用myisamchk进行故障恢复

MyISAM启动

以下为启动选项

--myisam-recover-option=mode

设置MyISAM表损坏后自动恢复的模式

--delay-key-write=ALL

不在MyISAM表写操作之间刷新key cache

key_buffer_size

Key cache的大小

以下系统变量影响MyISAM表

bulk_insert_buffer_size

用于优化批量插入操作的树缓冲区大小

myisam_max_sort_file_size

MySQL在重建MyISAM索引时(REPAIR TABLE、ALTER TABLE、LOAD DATA INFILE)可以使用的临时文件最大容量。如果需要的文件大小超过此值,索引会在key cache中创建,相比而言速度较慢

myisam_sort_buffer_size

设置用于表恢复的缓冲区大小

MyISAM表的存储格式

MyISAM支持三种不同的存储格式:静态固定长度、动态可变长度和压缩格式。前两者根据列的数据类型自动选择。压缩格式只能通过myisampack工具创建。

当使用CREATE TABLE或ALTERTABLE操作不包含BLOB、TEXT列时,ROW_FORMAT选项强制设置存储格式(FIXED、DYNAMIC)。

静态固定长度:

·CHAR和VARCHAR自动用空格填充,BINARY和VARBINARY以0x00填充。

·快速,因为数据文件中的行可以用简单的方法找到:用行长度乘以行号。

·容易缓存

·崩溃后容易重建,因为行的位置固定。

·不需要重新组织,除非删除了大量的记录,想为操作系统腾出磁盘空间。可以使用OPTIMIZE TABLE或myisamchk-r完成。

·通常比动态格式花费更多的空间。

动态可变长度:

·字符型的列长度可变,除了长度小于4的

·每行首部存在一个位图,用于记录哪些列包含空字符串(对于字符型)或0(对于数字型)。注意这里不包括NULL。空串和0为被标记在位图中而不存储在磁盘。非空字符串保存它的长度和实际内容(即保存实际长度+1)。

·通常比静态固定格式花费较少的空间。

·如果行变的很大,会对它进行分片,导致行碎片。OPTIMIZE TABLE或myisamchk-r可以用来改善性能。myisamchk -ei获取表的统计信息。

·崩溃时比静态格式的恢复困难,因为行可能被分为碎片而碎片的链接也可能失效。

压缩表:

·花费非常少的磁盘空间,这对于低速存储器(如CD-ROMs)很有帮助。

·每行单独地压缩,因此访问开销小。根据行的大小,每行的头部占1到3个字节不等。

·每列压缩也不同,通常每列都具有不同的哈夫曼树,以下为一些常见的压缩类型:

1、后缀空格压缩

2、前缀空格压缩

3、0值用1位(bit)来存储

4、整型数值如果都分布在一小范围中,则该列存储使用更小的类型。比如BIGINT(8字节)列中的值都分布在-128至127内,可以TINYINT(1字节)存储。

5、列只有某几种可能的值,转换为ENUM类型

6、以上各种压缩类型都可任意结合

·可以处理固定长度或动态长度记录

MyISAM表的问题

当以下事件发生时,可能导致表损坏:

·mysqld进程在写过程中被kill

·不可意料的主机Crash

·硬件故障

·当服务器正在修改表时,使用外部程序(如myisamchk)修改表

·MySQL或MyISAM代码存在的Bug

不正确的关闭表:

每个MyISAM索引文件(.MYI)在首部有一个计数器用来验证表是否正确关闭。当使用CHECK TABLE或myisamchk出现以下提示时表明计数器目前不同步:

clients are using or haven'tclosed the table properly

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值