MyISAM是Mysql的默认存储引擎,它在磁盘上存储为三个文件, .MYD是数据文件  .MYI是索引文件  .frm是存储表定义。我们可以考虑把数据文件和索引文件分别存到不同的磁盘,实现IO平均分布。

如果对事务完整性没有要求,或者以select 、insert 为主的操作,可以选择该存储引擎。
     1、MyISAM只会对索引进行缓存,而数据文件则是使用操作系统缓存,当索引数据大于key buffer的时候,也会使用操作系统缓存。

2、使用count(*)的时候很快,因为行数是单独保存的。

3、不支持事务,不支持外键,访问快。

4、使用表级锁定。

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

6、可以使用myisamchk进行故障恢复。

MyISAM表的存储格式:静态表(固定长度)【默认格式】、动态表、压缩表

1、固定格式的特点:快速、容易缓存、崩溃后容易恢复、比动态表占用更大空间。但是静态表里面的字段是固定长度的,如果存储的数据长度不够,那么其他位就是用空格填充,在使用的时候,会由系统去掉空格。所以这个地方引入一个问题,如果我们的数据里面尾部本来就含有空格,那么在使用数据的时候,空格会被去掉, 关于这一点我们需要非常小心。

2、动态表格式的特点:除了长度小于4的列,其他字符型的列长度是可变的;比静态固定格式使用较少空间;如果一行变得很大的时候,会进行分片,所以会造成碎片化,可以使用optimize table或者myisamchk -r来改善性能,使用myisamchk -ei获取表的统计信息;如果崩溃了,比静态格式表的恢复困难。

效果截图--------

root->/tmp# myisamchk -r /var/lib/mysql/test/test_table.MYI
- recovering (with keycache) MyISAM-table '/var/lib/mysql/test/test_table.MYI'
Data records: 23068672

root->/tmp# myisamchk -ei /var/lib/mysql/test/test_table.MYI
Checking MyISAM file: /var/lib/mysql/test/test_table.MYI
Data records: 23068672   Deleted blocks:       0
- check file-size
- check record delete-chain
- check key delete-chain
- check index reference
- check records and index references
Records:          23068672    M.recordlength:        7   Packed:           -40%
Recordspace used:      100%   Empty space:           0%  Blocks/Record:   1.00
Record blocks:    23068672    Delete blocks:         0
Record data:     161480704    Deleted data:          0
Lost space:              0    Linkdata:              0

User time 1.25, System time 0.12
Maximum resident set size 1684, Integral resident set size 0
Non-physical pagefaults 516, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 25, Involuntary context switches 2746
root->/tmp#

3、压缩表的特点:占用非常少的磁盘空间;

root->/var/lib/mysql/test# ls -lh
total 155M
-rw-rw---- 1 mysql mysql 8.5K Sep 29 14:05 err_table.frm
-rw-rw---- 1 mysql mysql  612 Sep 29 14:05 err_table.MYD
-rw-rw---- 1 mysql mysql 1.0K Nov 26 16:16 err_table.MYI
-rw-rw---- 1 mysql mysql 8.4K Jan 19 23:34 test_table.frm
-rw-rw---- 1 mysql mysql 154M Jan 22 11:19 test_table.MYD
-rw-rw---- 1 mysql mysql 1.0K Jan 22 11:19 test_table.MYI
root->/var/lib/mysql/test# myisampack test_table.MYI
Compressing test_table.MYD: (23068672 records)
- Calculating statistics
- Compressing file
71.43%    
root->/var/lib/mysql/test# ls -lh
total 45M
-rw-rw---- 1 mysql mysql 8.5K Sep 29 14:05 err_table.frm
-rw-rw---- 1 mysql mysql  612 Sep 29 14:05 err_table.MYD
-rw-rw---- 1 mysql mysql 1.0K Nov 26 16:16 err_table.MYI
-rw-rw---- 1 mysql mysql 8.4K Jan 19 23:34 test_table.frm
-rw-rw---- 1 mysql mysql  45M Jan 22 11:19 test_table.MYD
-rw-rw---- 1 mysql mysql 1.0K Jan 22 11:24 test_table.MYI

测试MyISAM的事务性

----------------------

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into err_table(errsql) values('ppyy');
Query OK, 1 row affected (0.03 sec)

mysql> select * from err_table;
+---------+--------+--------+
| errcode | errsql | retime |
+---------+--------+--------+
| NULL    | ppyy   | NULL   |
+---------+--------+--------+
1 row in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> select * from err_table;
+---------+--------+--------+
| errcode | errsql | retime |
+---------+--------+--------+
| NULL    | ppyy   | NULL   |
+---------+--------+--------+
1 row in set (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from err_table;
+---------+--------+--------+
| errcode | errsql | retime |
+---------+--------+--------+
| NULL    | ppyy   | NULL   |
+---------+--------+--------+
1 row in set (0.00 sec)

mysql> alter table err_table engine=innodb;
Query OK, 1 row affected (0.19 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> start transaction;                          
Query OK, 0 rows affected (0.00 sec)

mysql> insert into err_table(errsql) values('zzqqq');
Query OK, 1 row affected (0.00 sec)

mysql> select * from err_table;                     
+---------+--------+--------+
| errcode | errsql | retime |
+---------+--------+--------+
| NULL    | ppyy   | NULL   |
| NULL    | zzqqq  | NULL   |
+---------+--------+--------+
2 rows in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.05 sec)

mysql> select * from err_table;
+---------+--------+--------+
| errcode | errsql | retime |
+---------+--------+--------+
| NULL    | ppyy   | NULL   |
+---------+--------+--------+
1 row in set (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from err_table;
+---------+--------+--------+
| errcode | errsql | retime |
+---------+--------+--------+
| NULL    | ppyy   | NULL   |
+---------+--------+--------+
1 row in set (0.00 sec)

----------------------

查看表状体

----------------------

mysql> show table status like 'test_table'\G;
*************************** 1. row ***************************
           Name: test_table
         Engine: MyISAM
        Version: 10
     Row_format: Fixed
           Rows: 46137344
 Avg_row_length: 7
    Data_length: 322961408
Max_data_length: 1970324836974591
   Index_length: 1024
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2015-01-19 23:34:54
    Update_time: 2015-01-22 11:19:17
     Check_time: 2015-01-22 11:19:17
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

ERROR:
No query specified

----------------------

MyISAM表常见损坏情况:

1、在写过程中Mysql的进程被杀掉;

2、主机宕机(例如硬件故障)

转载于:https://blog.51cto.com/woodywoodpecker/1606984

Mysql之MyISAM存储引擎相关推荐

  1. mysql 修改时间段内_详解mysql数据库MyISAM存储引擎如何转为Innodb及其中的注意点...

    概述 mysql数据库存储引擎为MyISAM的时候,在大访问量的情况下数据表有可能会出现被锁的情况,这就会导致用户连接网站时超时而返回502,此时就需要MySQL数据库MyISAM存储引擎转为Inno ...

  2. MySQL数据库MyISAM存储引擎转为Innodb

    之前公司的数据库存储引擎全部为MyISAM,数据量和访问量都不是很大,所以一直都没什么问题.但是最近出现了MySQL数据表经常被锁的情况,直接导致了用户连接网站时超时而返回502,于是决定把存储引擎转 ...

  3. MySQL 两种存储引擎:MyISAM与InnoDB对比及理解

    MySQL 两种存储引擎:MyISAM与InnoDB对比及理解 目前MySQL默认的存储引擎是InnoDB 现在大多数时候我们使用的都是InnoDB存储引擎,但是在某些情况下使用MyISAM更好,比如 ...

  4. mysql myisam存储引擎_MySQL浅谈MyISAM存储引擎

    本文来源于:IT摆渡网---一个IT实时问答系统快速解决你的任何IT问题,无需等待! mysql中用的最多存储引擎就是innodb和myisam.做为Mysql的默认存储引擎,myisam值得我们学习 ...

  5. mysql myisam存储引擎不能添加外键,添加后显示成功,实则失败

    mysql myisam存储引擎不能添加外键,添加后显示成功,实则失败. 添加显示成功后,可以轻松删除父表.

  6. MySQL学习笔记(二):MyISAM 存储引擎

    MyISAM 存储引擎 MyISAM 基于旧的 (不再可用) ISAM 存储引擎, 但有许多有用的扩展. 每个 MyISAM 表都存储在三个文件中的磁盘上.这些文件具有以表名开头的名称, 并具有用于指 ...

  7. MySQL中的InnoDB和MyISAM存储引擎区别

    区别: 1. InnoDB 支持事务,MyISAM 不支持事务.这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一: 2. InnoDB 支持外键,而 MyISAM ...

  8. MYSQL 浅谈MyISAM 存储引擎

    思维导图 介绍 mysql中用的最多存储引擎就是innodb和myisam.做为Mysql的默认存储引擎,myisam值得我们学习一下,以下是我对<高性能MYSQL>书中提到的myisam ...

  9. MyISAM 存储引擎(mysql 8.0)

    MyISAM基于旧的(不再可用的)ISAM存储引擎,但有许多有用的扩展. 表 16.2 MyISAM 存储引擎特性 特征 支持 B树索引 是的 备份/时间点恢复(在服务器中实现,而不是在存储引擎中.) ...

最新文章

  1. 【 数字信号处理 】定点数的表示之二进制数的原码与补码
  2. 图像几何变换之透视变换
  3. jQuery 表格自动增加
  4. 1.4 第一个Python程序
  5. 将ocx和DLL文件打包成cab文件,inf的编写
  6. 使用Flask-SocketIO完成服务端和客户端的双向通信
  7. html5翻卡片游戏,用 JavaScript 写一个卡片小游戏
  8. XManager 远程访问 Ubuntu16.04 图形界面
  9. python调用flask接口实例化_常用业务接口界面化 in python flask
  10. 面试题:React实现鼠标托转文字绕原点旋转
  11. ubuntu下怎样安装星际译王stardict和下载本地词典
  12. 组合模式-完美处理树形递归结构
  13. 硬盘格式化后数据还可以恢复吗?格式化硬盘的恢复方法
  14. Java | 绘图:Graphics2D
  15. php垃圾回收,PHP垃圾回收机制的理解
  16. 小学计算机写字板教案,小学第二册信息技术《第9课走进“写字板”》教学参考...
  17. Designing an Encoder for StyleGAN Image Manipulation论文解读
  18. 劳务员培训建筑八大员培训劳务员建筑劳务分包管理突出的问题
  19. DNF纯图色起号源码
  20. Dashgo D1使用手册

热门文章

  1. Laravel自定义artisan命令在Sell中运行
  2. 计算机水平怎么填范例,简历表个人能力怎么写(大学生个人获奖情况范例)
  3. 第十二届蓝桥杯省赛一等奖国赛一等奖经验总结
  4. android10全面屏手势 操作图,全面屏手势浪潮来临?安卓Q测试版新发现,手势操作十分便捷...
  5. 对付不良商家,恶补攒机知识
  6. 状语从句不是简单句_英语简单句、从句分类及解析
  7. Qt(三)--- 实现QQ登陆界面头像状态栏的功能
  8. 朴素贝叶斯算法,点进来了解了解。
  9. 梦幻古龙服务器 文档,梦幻古龙GM命令大全较完整
  10. 1600-卡斯丁狗要吃糖葫芦 ZCMU