mysql myisam_MySQL存储引擎之MyISAM

MyISAM为MySQL5.5之前版本默认存储引擎。一般的临时表和系统表都是MyISAM。这里的临时表是指:在排序,分组等操作中,当数量超过一定的大小之后,由查询优化器建立的临时表。

MyISAM存储引擎表由MYD(数据文件)和MYI(索引文件)组成。

当我们新建一张表指定MyISAM为存储引擎的时候,会有三个文件对应生成。myIsam.frm(用于记录表结构),myIsam.MYD,myIsam.MYI。

特性:

并发性与锁级别

是表级锁而不是行级锁,也就是说在对数据表进行修改的时候,需要对整个表进行加锁,对表进行读取时,需要对表进行加共享锁。

表损坏修复

对与意外关闭进行修复,这里的修复不是事务修复,对表的修复可能造成数据的丢失。我们可以使用 check table tablename 进行表的检查,使用repair table tablename 进行表的修复。

下面我们看一下修复实例:

新建数据库

MySQL [test]> create table myIsam( id int ,c1 varchar(10))engine=myisam;

Query OK, 0 rows affected (0.04 sec)

在文件系统中查看生成的文件

[root@wangerxiao test]# pwd

/usr/local/mysql/var/test

[root@wangerxiao test]# ls -l myIsam*

-rw-r----- 1 mysql mysql 8582 Mar 14 19:22 myIsam.frm

-rw-r----- 1 mysql mysql 0 Mar 14 19:22 myIsam.MYD

-rw-r----- 1 mysql mysql 1024 Mar 14 19:22 myIsam.MYI

使用check 检查数据表

MySQL [test]> check table myIsam;

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

| Table | Op | Msg_type | Msg_text |

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

| test.myIsam | check | status | OK |

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

1 row in set (0.04 sec)

使用repair修复数据表

MySQL [test]> repair table myIsam;

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

| Table | Op | Msg_type | Msg_text |

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

| test.myIsam | repair | status | OK |

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

1 row in set (0.01 sec)

除了使用repair外,我们还可以使用命令行修复,不过要事先关闭mysql服务,否则会造成更多的数据丢失。

myisamchk --help

MyISAM表支持的索引类型

支持全文索引

MyISAM表支持数据压缩

命令: myisampack

由于表中的数据是独立进行压缩的,所以在读取单行数据的时候不必对整个表进行解压。

实例如何进行压缩:

进行压缩

[root@wangerxiao test]# myisampack -b -f myIsam.MYI

Compressing myIsam.MYD: (0 records)

- Calculating statistics

- Compressing file

Empty file saved in compressed format

压缩之前的文件为 .OLD

[root@wangerxiao test]# ls -lh myIsam*

-rw-r----- 1 mysql mysql 8.4K Mar 14 19:22 myIsam.frm

-rw-r----- 1 mysql mysql 50 Mar 14 19:28 myIsam.MYD

-rw-r----- 1 mysql mysql 1.0K Mar 14 19:38 myIsam.MYI

-rw-r----- 1 mysql mysql 0 Mar 14 19:28 myIsam.OLD

压缩之后,我们尝试插入数据表

MySQL [test]> insert into myIsam values(1,'aa');

ERROR 1036 (HY000): Table 'myIsam' is read only

提示错误,因为在压缩之后,数据表变成只读。

限制

如果在MySQL5.0之前的版本默认表大小为4G

如果想要存储大表则要修改 MAX_Rows 和 AVG_ROW_LEnGTH

两个参数相乘的大小,就是表可能达到的最大的大小

在5.0版本之后,单表支持256TB

适用场景

非事务型应用

只读类应用(支持压缩)

空间类应用(GPS数据)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值