Mysql MyISAM引擎的特征

来源:互联网 发布:java 第三方登录 编辑:程序博客网 时间:2024/05/21 11:31


Myisam特征从磁盘上表现来说以三种形态进行存放,无论什么引擎的表都会有一个表结构文件,表结构文件里面保存了表是怎么定义的信息。.MYD,.MYI结尾的就是MYISAM具有代表性的另外两个文件,一个是存放数据文件的,所谓的数据文件就是保存了每一行的内容,另外一个是索引文件,目的是加快查询表里面的内容的。索引就像字典里面的目录,是先查阅字典里面的目录再定位某个字在第几页。通过索引的搜索对数据进行搜索会更加有效。

每次建立一个MYISAM引擎的表都会都会建立三个文件,.frm,.MYD,.MYI文件。索引文件.MYI是以二次方进行增长的。

mysql> create database myisam_test;

Query OK, 1 row affected (0.00 sec)

 

mysql> use myisam_test;

Database changed

mysql> create table test1(id int)engine=myisam;

Query OK, 0 rows affected (0.02 sec)

 

mysql> exit;

 

[root@localhost test]# ls -al /var/lib/mysql/myisam_test

total 24

drwx------. 2 mysql mysql   71 Oct 30 14:39 .

drwxr-xr-x. 6 mysql mysql 4096 Oct 30 14:39 ..

-rw-rw----. 1 mysql mysql   65 Oct 30 14:39 db.opt

-rw-rw----. 1 mysql mysql 8556 Oct 30 14:39 test1.frm    表结构文件,里面定义了表结构

-rw-rw----. 1 mysql mysql    0 Oct 30 14:39 test1.MYD  数据文件里面没有内容,0字节

-rw-rw----. 1 mysql mysql 1024 Oct 30 14:39 test1.MYI  1024个字节,以2的幂次方进行增长

可以看到创建一个myisam引擎的表就会创建三个文件。

 

这三个文件佷方便的可以进行打包和备份,如将这个三个文件删除就相当于将这个表删除了。可以将数据文件和索引文件放在不同的磁盘上面,可以将.MYD频繁写的数据文件放在较快的磁盘,而索引放在另外一个磁盘。将两个放在不同的地方以软链接的方式建立。

 

可以将两个MYISAM的表合存到MERGE引擎的表里面。

 

可以将MYISAM引擎的表进行压缩,转换为压缩的数据格式,但是只是只读的格式,可以节省磁盘空间。

 

MYISAM引擎在锁方面的表现的方式和其他数引擎是不一样的,主要是和innodb不一样。当用户去锁表的时候只能将整张表锁定,这个时候对于并发的效率就不高,在对表进行写操作,会产生排他锁,排除其他方式的锁,总是会优先写操作,此时其他人既不可以更新数据可不可以改写数据,这样性能大大下降。但是死锁现象不会发生,因为对数据的操作都是有序的,不会存在数据冲突。对于MYISAM引擎的表,写操作的优先级高于读操作。


Sammy的表格式是可以迁移的,可以将三个文件直接拷贝到另外一台机器上就可以使用了。如将test1.frmtest1.MYDtest1.MYI这三个文件移动另外一个数据库目录夹下面,再去查看该数据库里面表的时候就会多出test表。

[root@localhost mysql]# ls -a test

.  ..  binlog_test.frm  binlog_test.ibd  db.opt

[root@localhost mysql]# ls -a myisam_test

.  ..  db.opt  test1.frm  test1.MYD  test1.MYI

[root@localhost mysql]# pwd

/var/lib/mysql

[root@localhost mysql]# cd myisam_test

[root@localhost myisam_test]# cp -p test1.frm test1.MYD test1.MYI  ../test

[root@localhost myisam_test]# ls -a ../test

.  ..  binlog_test.frm  binlog_test.ibd  db.opt  test1.frm  test1.MYD  test1.MYI

 

mysql> use test;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

 

Database changed

mysql> show tables;

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

| Tables_in_test |

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

| binlog_test    |

| test1          |

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

 可以看到可以将Myisam的引擎的表的文件拷贝到其他目录下继续使用。这个相当于冷备份。

 

 

 

当装载数据到一个空的Myisam引擎表的时候,可以采用一种方式,就是可以将索引的更新先屏蔽,等所有的数据导入进去之后再将索引开启,这个方式影响大批量数据导入导出。

因为数据频繁插入更新会造成索引经常发生变化,每次插入几条数据,二叉树就需要重新平衡,这样非常影响性能。


在Myisam引擎的磁盘空间消耗完了,用户还是可以向里面持续写入数据而且不报错,如果在某些地方将空间释放出来了,之前驻留在内存没有写入的信息会被一次性写入磁盘。