myim(my是什么软件)

myim(my是什么软件)

MyISAM 是 MySQL 的默认存储引擎。MyISAM 不支持事务、也不支持外键,其优势是访问的速度快,对事务完整性没有要求或者以 SELECT、INSERT 为主的应用基本上都可以使用这个引擎来创建表。

每个 MyISAM 在磁盘上存储成 3 个文件,其文件名都和表名相同,但扩展名分别是:

  • frm(存储表定义);
  • MYD(MYData,存储数据);
  • MYI (MYIndex,存储索引)。

数据文件和索引文件可以放置在不同的目录,平均分布 IO,获得更快的速度。

要指定索引文件和数据文件的路径,需要在创建表的时候通过 DATA DIRECTORY 和 INDEX DIRECTORY 语句指定,也就是说不同 MyISAM 表的索引文件和数据文件可以放置到不同的路径下。文件路径需要是绝对路径,并且具有访问权限。

MyISAM 类型的表可能会损坏,原因可能是多种多样的,损坏后的表可能不能访问,会提示需要修复或者访问后返回错误的结果。MyISAM 类型的表提供修复的工具,可以用 CHECK TABLE 语句来检查 MyISAM 表的健康,并用 REPAIR TABLE 语句修复一个损坏的 MyISAM 表。 表损坏可能导致数据库异常重新启动,需要尽快修复并尽可能地确认损坏的原因。

MyISAM 的表又支持 3 种不同的存储格式,分别是:

  • 静态(固定长度)表;
  • 动态表;
  • 压缩表。

其中,静态表是默认的存储格式。静态表中的字段都是非变长字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。静态表的数据在存储的时候会按照列的宽度定义补足空格,但是在应用访问的时候并不会得到这些空格,这些空格在返回给应用之前已经去掉。

但是也有些需要特别注意的问题,如果需要保存的内容后面本来就带有空格,那么在返回结果的时候也会被去掉,开发人员在编写程序的时候需要特别注意,因为静态表是默认的存储格式,开发人员可能并没有意识到这一点,从而丢失了尾部的空格。以下例子演示了插入的记录包含空格时处理的情况:

mysql> create table Myisam_char (name char(10)) engine=myisam; 
Query OK, 0 rows affected (0.04 sec) 
mysql> insert into Myisam_char values('abcde'),('abcde '),(' abcde'),(' abcde '); 
Query OK, 4 rows affected (0.00 sec) 
Records: 4 Duplicates: 0 Warnings: 0 
mysql> select name,length(name) from Myisam_char; 
+---------+--------------+ 
| name | length(name) | 
+---------+--------------+ 
| abcde | 5 | 
| abcde | 5 | 

   
myim(my是什么软件)
| abcde | 7 | | abcde | 7 | +---------+--------------+ 4 rows in set (0.00 sec)

从上面的例子可以看出,插入记录后面的空格都被去掉了,前面的空格保留。

动态表中包含变长字段,记录不是固定长度的,这样存储的优点是占用的空间相对较少,但是频繁地更新删除记录会产生碎片,需要定期执行 OPTIMIZE TABLE 语句或 myisamchk -r 命令来改善性能,并且出现故障的时候恢复相对比较困难。

压缩表由 myisampack 工具创建,占据非常小的磁盘空间。因为每个记录是被单独压缩的, 所以只有非常小的访问开支。

搜索微信公众号:TestingStudio霍格沃兹的干货都很硬核

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/29641.html

(0)
上一篇 2023-09-22 13:30
下一篇 2023-09-22 15:30

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注