mysql 开发基础系列9 存储引擎 MyISAM 介绍
MyISAM是mysql 默认存储引擎,它不支持事务,外键。但访问速度快,对事务完整性没有要求或者以select,insert 为主的应用基本上都可以使用这个引擎。
每个MyISAM在磁盘上存储成3个文件,文件名都和表名相同,扩展分别是:
.frm(存储表定义)
.MYD(MYdata 存储数据)
.MYI( MYIndex 存储索引)
数据文件和索引文件可以放置在不同的目录,平均分布IO,获取更快速度。
1. 指定索引文件和数据文件的路径
在创建表的时候通过data directory和 index directory语句指定, 也就是不同MyISAM表的索引文件和数据文件可以放置到不同的路径下,文件路径需要是绝对路径,并且有访问权限
-- 默认存储路径
SELECT @@datadir;

-- 首先要创建/ibddir目录,有5.6才支持单表指定目录
CREATE TABLE test_dir_table(
strative_id VARCHAR(16) NOT NULL,
date_id VARCHAR(8) NOT NULL
PRIMARY KEY (strative_id)
) ENGINE=MYISAM DATA DIRECTORY = '/ibddir' INDEX DIRECTORY= '/ibddir';
2. 检查表的健康状态
表可能会损坏,原因多种多样,check table对MYISAM和InnoDB表都有作用,如检查有异常使用(repair table表名;)来修复。
语法:
CHECK TABLE tbl_name[,tbl_name] ... [option] ...
option= {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
CHECK TABLE ai;

3. MYISAM表3种不同的存储格式
3.1 静态(固定长度)表, 动态表, 压缩表。 其中静态表是默认的存储格式,字段都是非变长字段,每个记录都是固定长度。这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复,缺点是空间占用多,存储时会按照宽度定义补足空格,但应用访问时并不会得到这些空格。
但有个注意是: 如果保存的内容后面本来就带有空格,在应用访问时也会被自动去掉,从而丢失了尾部空格 。
CREATE TABLE Myisam_char (NAME CHAR(10)) ENGINE=MYISAM;
INSERT INTO Myisam_char VALUES('abcde'),('abcde '),(' abcde'),(' abcde ');
SELECT NAME,LENGTH(NAME) FROM Myisam_char;
从下面的输出看出,前面空格保留了。

3.2 动态表中包含变长字段,记录不是固定长度的,优势是占用的空间相对比较小,但频繁的更新删除记录会产生碎片,需要定期optimize table或myisamchk -r命令,出现故障时恢复相对比较困难。
3.3 压缩表由myisampack 工具创建,占据非常小的磁盘空间,每个记录是被单独压缩的。
4.最后在回顾下myisam支持的特性
存储限制: “有”, 官方是256TB
锁机制 : "表锁" 适用于并发性低的场景
B树索引 : "支持"
全文索引 :"支持"
索引缓存 :"支持"
数据压缩 :"支持"
空间使用 :"低" 默认是静态存储空格
内存使用 :"低" 因为不支持数据缓存
批理插入的速度: "高" 因为不支持支持事务,不需要写入日志文件
mysql 开发基础系列9 存储引擎 MyISAM 介绍的更多相关文章
- mysql 开发基础系列10 存储引擎 InnoDB 介绍
一. 概述: InnoDB存储引擎提供了具有提交,回滚,和崩溃恢复能力的事务安全,对比MYISAM 的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引.它的特点有如下: ...
- mysql 开发基础系列11 存储引擎memory和merge介绍
一. memory存储引擎 memoery存储引擎是在内存中来创建表,每个memory表只实际对应一个磁盘文件格式是.frm. 该引擎的表访问非常得快,因为数据是放在内存中,且默认是hash索引, ...
- mysql 开发基础系列12 选择合适的数据类型(上)
一. char 与varchar比较 在上图的最后一行的值只适用在"非严格模式",关于严格模式后面讲到.在“开发基础系列4“ 中讲到CHAR 列删除了尾部的空格.由于char是固定 ...
- mysql 的逻辑架构 与 存储引擎的介绍
mysql 的逻辑架构分为三层: 最上层的服务大多数基于网络的客户端.服务器的工具或者服务都有类似的架构,比如连接处理,授权认证.安全等 第二层架构:mysql的核心服务功能都在这一层,包括查询解析, ...
- mysql 开发基础系列8 表的存储引擎
一. 表的存储引擎 1. 概述 插件式存储引擎是mysql数据库最重要的特性之一, 用户可以根据应用的需要选择如何存储和索引数据,是否使用事务等.在mysql 5.0里支持的引擎包括: MyISAM, ...
- mysql 开发基础系列20 事务控制和锁定语句(上)
一.概述 在mysql 里不同存储引擎有不同的锁,默认情况下,表锁和行锁都是自动获得的,不需要额外的命令, 有的情况下,用户需要明确地进行锁表或者进行事务的控制,以便确保整个事务的完整性.这样就需要使 ...
- mysql 开发基础系列15 索引的设计和使用
一.概述 所有mysql 列类型都可以被索引,是提高select查询性能的最佳方法. 根据存储引擎可以定义每个表的最大索引数和最大索引长度,每种引擎对每个表至少支持16个索引,总索引长度至少为256字 ...
- mysql 开发基础系列21 事务控制和锁定语句(下)
1. 隐含的执行unlock tables 如果在锁表期间,用start transaction命令来开始一个新事务,会造成一个隐含的unlock tables 被执行,如下所示: 会话1 会话2 ...
- MySQL中四种常用存储引擎的介绍
MySQL常用的四种引擎的介绍 (1):MyISAM存储引擎: 不支持事务.也不支持外键,优势是访问速度快,对事务完整性没有 要求或者以select,insert为主的应用基本上可以用这个引擎来创建表 ...
随机推荐
- 使用Python完成排序(快排法、归并法)
class Sort(object): def quick_sort(self, ls): self.quick_sort_helper(ls, 0, len(ls) - 1) return ls d ...
- 【转】async & await 的前世今生(Updated)
async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐 ...
- 从零开始学习java(一)java基础语法
从公司裸辞一个月,原本工作是做VB的,现在想从事java:在找工作的时候总是要什么项目经验,多少有些不爽,所有语言都有共 通性,我就不信java有这么难?给自己点时间来学习.坚持一个月自学,看看自己的 ...
- 在IIS7上导出所有应用程序池的方法批量域名绑定
在IIS7+上导出所有应用程序池的方法:%windir%/system32/inetsrv/appcmd list apppool /config /xml > c:/apppools.xml ...
- [转]etcd 启用 https
1, 生成 TLS 秘钥对 2,拷贝密钥对到所有节点 3,配置 etcd 使用证书 4,测试 etcd 是否正常 5,配置 kube-apiserver 使用 CA 连接 etcd 6,测试 kube ...
- jq 下拉框获取选中自定义属性值
// 下拉框发送改变后 获取选择的信息 <div class="form-group"> <label class="col-sm-3 control- ...
- 缓存,减少对sql语句的访问
一级缓存 SqlSession 的缓存 ------>自动开启 二级缓存: 做到从不同的缓存中共享数据 SqlSessionFactory 的缓存 --->需要手动开启 映射配置文件中配 ...
- ADC_DMA_TIM
/************************************************************************** * 文件名:ADC.h * * 编写人:离逝的风 ...
- Gitee(码云)、Github同时配置ssh key
一.cd ~/.ssh 二.通过下面的命令,依次生成两个平台的key $ ssh-keygen -t rsa -C "xxxxxxx@qq.com" -f "github ...
- angularjs等号运算
在angularjs的程序里,等号运算符有下面几种运算: