首页 > 编程知识 正文

存储引擎my为什么不支持事务(一种存储引擎)

时间:2023-05-06 15:22:41 阅读:88288 作者:352

在MySQL5.1之前的版本中,MyISAM是默认的存储引擎。 尽管MyISAM提供了全文索引、压缩和空间函数等许多特性,但MyISAM不支持事物和行级锁定,并且存在崩溃后无法安全恢复的缺点。 多亏了MyISAM引擎,尽管MySQL支持事物已经很久了,但在很多人的概念中,MySQL还是一个非事务型数据库。 MyISAM引擎不支持事务处理,不支持崩溃后的安全恢复,但它从来都不存在。 如果数据是只读的,或者表很小,可以承受修复操作,则可以继续使用MyISAM。

存储

MyISAM将表存储在两个文件中:数据文件和索引文件。 扩展名为. MYD和. MYI。 MyISAM表可以包含动态或静态行。 MySQL根据表的定义决定行的格式。 MyISAM表中可以存储的行记录的数量通常受可用磁盘空间或操作系统中各个文件的最大大小限制。

在MySQL5.0中,如果MyISAM表是可变长度行,则缺省配置只能处理256TB的数据。 这是因为指向数据记录的指针长度为6字节。 在以前的版本中,指针的长度缺省为4字节,因此只能处理4GB的数据。 所有的MySQL版本都支持8字节的指针。 要更改MyISAM表指针的长度,请通过更改表的MAX_ROWS和AVG_ROWS_LENGTH选项的值来实现。 两者相乘后,将成为表所能达成的最大代理商。 如果更改这两个参数,则会重新构建整个表和表的所有索引,并且可能需要一段时间才能完成。

MyISAM特性

是MySQL最先进的存储引擎之一,MyISAM具有多年来为满足用户实际需要而开发的特性。

与锁定同时执行

MyISAM锁定的是整个表,而不是行。 读取操作会对所有需要读取的表施加共享锁定,并在写入时对表施加独占锁定。 但是,在表中有读取查询的同时,也可以在表中插入新记录。

修复

对于MyISAM表,MySQL可以手动或自动执行检查和修复操作,但这里的修复、事务恢复和故障恢复是不同的概念。 执行表格修复可能会导致某些数据丢失,从而导致修复操作非常缓慢。 可以使用检查表“我的表”进行修复。 如果MySQL服务器已停止,也可以使用myisamchk命令行工具检查并修复字段。

索引特性

对于MyISAM表,长字段(如BLOB和TEXT )也可以基于前500个字符进行索引。 MyISAM还支持全文索引。 这是基于分词编制的索引,支持复杂的查询。

延迟更新索引

如果在创建MyISAM表时指定DELAY_KEY_WRITE选项,则每次完成更改时,更改的索引数据都不会立即写入磁盘,而是写入内存中的密钥缓冲区。 只有在清除密钥缓冲区或关闭表时,才会将相应的索引块写入磁盘。 虽然此方法可以显着提高写入性能,但如果数据库或组件崩溃,则索引将损坏,需要修复操作。 延迟更新密钥的特性可以全局设置,也可以在单个表中设置。

MyISAM压缩表

如果在创建和导入数据后表没有发生变化,则这些表可能适合于MyISAM压缩表。

可以使用MyISAMpack压缩myisam表。 表示不能修改压缩。 压缩表可以显着减少磁盘空间,从而减少磁盘I/o,提高查询性能。 压缩表也支持索引,但索引也是只读的。

以目前的硬件能力,在大多数APP场景中,读取压缩表数据时解压带来的开销不大,IO削减带来的好处要大得多。 在压缩时,整个表格的记录也会被独立压缩,因此在读取单行时不需要解压缩整个表格。

MyISAM的性能

由于MyISAM引擎设计简单,数据以紧密的形式存储,因此在某些场景下性能良好。 MyISAM存在服务器级性能扩展的限制,包括索引缓冲区的Mutex锁定和基于MariaDB段的索引密钥缓冲机制。 但是,MyISAM最典型的性能问题是表锁问题,如果发现所有查询长期处于“锁定”状态,则表锁无疑是ssdxtz。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。