MyISAM不支持事务、也不支持外键,其优势是访问速度快。对事务完整性没有要求或以SELECT、INSERT为主的应用可以考虑使用这个引擎。

每个使用MyISAM引擎的表在磁盘上都存储成3个文件,文件名都和表名相同,扩展名分别是:

.frm,存储表定义

.MYD,存储数据

.MYI,存储索引

root@database-one 09:03: [gftest]> create table testmyisam(id int,name varchar(10),primary key(id)) engine=myisam;

Query OK, 0 rows affected (0.01 sec)

root@database-one 09:03: [gftest]> exit

Bye

[root@database-one ~]# cd /home/mysql/gftest/

[root@database-one gftest]# ls -l testmyisam.*

-rw-r----- 1 mysql mysql 8586 2月 29 09:03 testmyisam.frm

-rw-r----- 1 mysql mysql 0 2月 29 09:03 testmyisam.MYD

-rw-r----- 1 mysql mysql 1024 2月 29 09:03 testmyisam.MYI

[root@database-one gftest]#

数据文件和索引文件可以放在不同的目录,分散I/O,获得更好的性能,创建表时通过DATA DIRECTORY和INDEX DIRECTORY指定。

root@database-one 09:14: [gftest]> create table testmyisam1(id int,name varchar(10),primary key(id)) engine=myisam data directory='/tmp' index directory='/tmp';

Query OK, 0 rows affected (0.20 sec)

root@database-one 09:14: [gftest]> exit

Bye

[root@database-one gftest]# cd /tmp

[root@database-one tmp]# ls -l testmyisam*

-rw-r----- 1 mysql mysql 0 2月 29 09:14 testmyisam1.MYD

-rw-r----- 1 mysql mysql 1024 2月 29 09:14 testmyisam1.MYI

[root@database-one tmp]# cd /home/mysql/gftest/

[root@database-one gftest]# ls -l testmyisam1*

-rw-r----- 1 mysql mysql 8586 2月 29 09:14 testmyisam1.frm

lrwxrwxrwx 1 mysql mysql 20 2月 29 09:14 testmyisam1.MYD -> /tmp/testmyisam1.MYD

lrwxrwxrwx 1 mysql mysql 20 2月 29 09:14 testmyisam1.MYI -> /tmp/testmyisam1.MYI

从上面可以看到,真实数据文件和索引文件放到了指定的目录,但是表定义文件继续放在默认位置,同时MySQL在默认位置还创建了指向真实数据文件和索引文件的链接文件。

MyISAM的表还支持3种不同的存储格式:

Static (Fixed-Length) Table,即静态表(固定长度)。这是MyISAM表的默认格式,每行使用固定字节数存储。当表不包含可变长度列(VARCHAR、VARBINARY、BLOB或TEXT)时使用。

Dynamic Table,即动态表。如果MyISAM表包含任何可变长度的列(VARCHAR,

VARBINARY、BLOB或TEXT),或者使用ROW_FORMAT=DYNAMIC选项建表,均会使用动态方式存储。

Compressed Table,即压缩表。压缩存储格式是一种只读格式,由myisampack工具生成,用myisamchk解压缩。

root@database-one 09:31: [gftest]> select * from information_schema.tables where TABLE_SCHEMA='gftest' and TABLE_NAME='testmyisam' \G

*************************** 1. row ***************************

TABLE_CATALOG: def

TABLE_SCHEMA: gftest

TABLE_NAME: testmyisam

TABLE_TYPE: BASE TABLE

ENGINE: MyISAM

VERSION: 10

ROW_FORMAT: Dynamic

TABLE_ROWS: 0

AVG_ROW_LENGTH: 0

DATA_LENGTH: 0

MAX_DATA_LENGTH: 281474976710655

INDEX_LENGTH: 1024

DATA_FREE: 0

AUTO_INCREMENT: NULL

CREATE_TIME: 2020-02-29 09:03:55

UPDATE_TIME: 2020-02-29 09:03:55

CHECK_TIME: NULL

TABLE_COLLATION: utf8_general_ci

CHECKSUM: NULL

CREATE_OPTIONS:

TABLE_COMMENT:

1 row in set (0.06 sec)

root@database-one 09:32: [gftest]> create table testmyisam2(id int,name char(10),primary key(id)) engine=myisam;

Query OK, 0 rows affected (4.16 sec)

root@database-one 09:34: [gftest]> select * from information_schema.tables where TABLE_SCHEMA='gftest' and TABLE_NAME='testmyisam2' \G

*************************** 1. row ***************************

TABLE_CATALOG: def

TABLE_SCHEMA: gftest

TABLE_NAME: testmyisam2

TABLE_TYPE: BASE TABLE

ENGINE: MyISAM

VERSION: 10

ROW_FORMAT: Fixed

TABLE_ROWS: 0

AVG_ROW_LENGTH: 0

DATA_LENGTH: 0

MAX_DATA_LENGTH: 9851624184872959

INDEX_LENGTH: 1024

DATA_FREE: 0

AUTO_INCREMENT: NULL

CREATE_TIME: 2020-02-29 09:34:00

UPDATE_TIME: 2020-02-29 09:34:00

CHECK_TIME: NULL

TABLE_COLLATION: utf8_general_ci

CHECKSUM: NULL

CREATE_OPTIONS:

TABLE_COMMENT:

1 row in set (0.02 sec)

可以看到,testmyisam表因为name列是varchar类型,所以存储格式为动态的(ROW_FORMAT: Dynamic),testmyisam2表因为name列是char类型,所以存储格式为静态的(ROW_FORMAT: Fixed)。

静态表中字段都是非变长字段,每条记录都是固定长度,存储速度非常快,容易缓存,出现故障容易恢复,缺点是占用空间通常比动态表多。静态表的数据在存储时会按照列宽补足空格,但在数据读取时会去掉空格,这对那些内容后面本来就有空格的场景需要特别注意,否则可能会引发问题。

root@database-one 09:44: [gftest]> insert into testmyisam2 values(1,'abc'),(2,'abc '),(3,' abc'),(4,' abc ');

Query OK, 4 rows affected (0.00 sec)

Records: 4 Duplicates: 0 Warnings: 0

root@database-one 09:45: [gftest]> select id,name,length(name) from testmyisam2;

+----+------+--------------+

| id | name | length(name) |

+----+------+--------------+

| 1 | abc | 3 |

| 2 | abc | 3 |

| 3 | abc | 4 |

| 4 | abc | 4 |

+----+------+--------------+

4 rows in set (0.03 sec)

而动态表就不会存在这个问题:

root@database-one 09:47: [gftest]> insert into testmyisam values(1,'abc'),(2,'abc '),(3,' abc'),(4,' abc ');

Query OK, 4 rows affected (0.01 sec)

Records: 4 Duplicates: 0 Warnings: 0

root@database-one 09:47: [gftest]> select id,name,length(name) from testmyisam;

+----+-------+--------------+

| id | name | length(name) |

+----+-------+--------------+

| 1 | abc | 3 |

| 2 | abc | 4 |

| 3 | abc | 4 |

| 4 | abc | 5 |

+----+-------+--------------+

4 rows in set (0.04 sec)

动态表中因为包含变长字段,记录长度是不固定的,占用空间相对较少,但是频繁更新和删除会产生碎片,影响性能,需要定期进行optimize table或myisamchk -r来改善性能。

root@database-one 09:47: [gftest]> optimize table testmyisam;

+-------------------+----------+----------+----------+

| Table | Op | Msg_type | Msg_text |

+-------------------+----------+----------+----------+

| gftest.testmyisam | optimize | status | OK |

+-------------------+----------+----------+----------+

1 row in set (0.06 sec)

mysql isam 食物_MySQL的存储引擎之MyISAM相关推荐

  1. mysql isam 食物_MySQL常用存储引擎之MyISAM

    1. mysql 5.5之前版本默认存储引擎 1.1 因为这个原因现在还有大量服务器在使用这myisam引擎的表 1.2 myisam是mysql大部分系统表和临时表使用的存储引擎 2. myisam ...

  2. mysql myisam引擎_MySQL常用存储引擎之MyISAM

    1. mysql 5.5之前版本默认存储引擎 1.1 因为这个原因现在还有大量服务器在使用这myisam引擎的表 1.2 myisam是mysql大部分系统表和临时表使用的存储引擎 2. myisam ...

  3. mysql federated 配置_MySQL FEDERATED 存储引擎的使用

    FEDERATED 存储引擎描述 FEDERATED存储引擎能让你访问远程的MySQL数据库而不使用replication或cluster技术(类似于Oracle的dblink),使用FEDERATE ...

  4. mysql memory优点_MySQL Memory存储引擎:优势及性能测试

    [IT168技术]需求源自项目中的MemCache需求,开始想用MemCached(官方站点:http://memcached.org/ ),但这个在Linux下面应用广泛的开源软件无官方支持的Win ...

  5. mysql federated 优缺点_MySQL FEDERATED 存储引擎

    MySQL中针对不同的功能需求提供了不同的存储引擎.所谓的存储引擎也就是MySQL下特定接口的具体实现. FEDERATED是其中一个专门针对远程数据库的实现.一般情况下在本地数据库中建表会在数据库目 ...

  6. mysql blackhole缺点_MySQL的存储引擎之Blackhole

    Blackhole,黑洞,初见这个词,一下就想到了相对论中的那个能吞噬一切,连光都无法逃脱的黑洞.MySQL的Blackhole引擎会怎么样呢?看看官方文档: The BLACKHOLE storag ...

  7. mysql blackhole缺点_MySQL BLACKHOLE存储引擎_编程学问网

    15.10.BLACKHOLE存储引擎 BLACKHOLE存储引擎就像"黑洞"一样,它接收数据但丢弃它而不是存储它.取回总是返回空集: mysql> CREATE TABLE ...

  8. MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇

    一 MyISAM 1.1 MyISAM简介 MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的 ISAM (Indexed Sequential Access Method:有索引的顺 ...

  9. Mysql第三章:存储引擎(MyISAM和Innodb)

    目录 1:什么是存储引擎 2:常用存储引擎 2.1:MyISAM特点 2.2:Innodb特征 2.2.1:Innodb优点 2.2.2:innoDB内存模型 3:MVCC多版本控制器 3.1:首先了 ...

最新文章

  1. css改变背景透明度
  2. [LeetCode/LintCode] Factorial Trailing Zeros
  3. python乘法口诀编程-中年大叔学编程-用Python打印个九九乘法表
  4. VMware vSphere Client WIN10安装问题
  5. 查看CentOS的系统版本(亲测)
  6. RabbitMq--2--安装
  7. mysql5.7环境搭建_mysql5.7.13环境搭建教程(解压缩版)
  8. linux之如何复制文件夹所有文件到其它文件夹
  9. 反转二叉树 java_leetcode刷题笔记-226. 翻转二叉树(java实现)
  10. 计算机一级考试复习资料,全国计算机一级考试复习资料
  11. 多线程解决同步问题浅析
  12. JAVA 设计模式 适配器模式
  13. 哪个服务器可以玩无限火力,lol无限火力2018开放时间 国服测试服已登录 网友:希望这次不要骗人!...
  14. Scratch 3.x编程技巧:条件语句与随机数
  15. 如何使用Java帮助文档
  16. ubuntu开机桌面不显示
  17. [IMX6Q][Android4.4] Audio添加控制MIC左右声道接口
  18. 高通SDX12平台:LINUX上MBIM功能异常
  19. 应用时间线服务器启动报错_从服务器到无服务器的时间轴和教程
  20. Apache Curator

热门文章

  1. 微信小程序实战教程-闫涛-专题视频课程
  2. After Effects Guru: Advanced Photoshop Integration After Effects 大师教程之与Photoshop集成高级技巧 Lynda课程中文字幕
  3. 答大二学生:跟着自己的兴趣定方向
  4. 交换机高级特性简介:MUX VLAN、端口隔离功能、端口安全功能简单原理与配置
  5. 佛山的车主们,为什么说跑优步比滴滴更赚钱?
  6. 如何判断是不是一个网段
  7. 「华流才是顶流」?分享你心目中的YYDS
  8. 阿里痛斥纵容造假包庇售假是社会公敌,对比四平台打假凸显“阿里力度”
  9. 辰迈智慧完美收官防灾减灾与应急救援展
  10. 推荐系统算法--ItemCF--MF(ALS)--FF