在MySQL中使用MyISAM

在MySQL中使用MyISAM

MyISAM是 MySQL 中最流行的存储引擎之一, MyISAM通常是继InnoDB之后的第二选择——在这篇博客文章中,我们将尝试找出如何最好地使用这个引擎。

什么是MyISAM?

MyISAM是MySQL的存储引擎之一。MyISAM基于ISAM(Indexed Sequential Access Method,索引顺序访问方法),这是IBM开发的一种索引算法,允许快速从大型数据集检索信息。然而,由于它的表锁定,在同时读取和写入一个表时,它做得不是很好。它也不支持事务。

对于一些MySQL工程师们来说,这个引擎是继InnoDB之后最受欢迎的选择:MyISAM存储引擎是MySQL在2005年提供的唯一一个存储引擎,已经使用了20多年。MyISAM是 MySQL 5.5版之前的默认存储引擎。

MyISAM内部原理

MyISAM内部工作原理的说明不在本博客的范围内,但我们可以为您提供有助于优化引擎性能的设置:

  • Myisam_sort_buffer_size 定义通过运行REPAIR、CREATE INDEX或ALTER TABLE查询对索引进行排序时分配的缓冲区。
  • Key_buffer_size 定义用于MyISAM表中索引块的缓冲区大小。增加此参数可以导致更好的索引处理。
  • Sort_buffer_size 描述为需要执行排序操作的线程分配的缓冲区的大小。
  • Read_buffer_size 描述为执行顺序扫描操作的线程分配的缓冲区大小。
  • Write_buffer_size 描述写入缓冲区的大小。

这四个参数很重要,但尽管它们很重要,您也应该关注 key_buffer_size 变量。key_buffer_size 变量决定内存中保存的索引缓冲区的大小,可以将其视为 innodb_buffer_pool_size 对应项。如果服务器主要由 MyISAM 表组成,则可以将服务器上大约25%或更多的可用RAM分配给 key_buffer_size 变量。 还有另一种方法可以确定 key_buffer_size 参数的值应该是什么–只需比较 key_read_requests 值(读取索引的请求总数)和 key_reads 值(key_read的值是必须从磁盘读取的请求数)。可以通过查看服务器状态变量来检索这些参数的值(只需在MySQL服务器上发出 SHOW GLOBAL status 查询)。记住,如果key_reads 返回一个大值,那么key_buffer_size的值可能太小。

MyISAM和MySQL 8.0

如果你问一些 MySQL工程师们,他们会说MyISAM不应该再使用了。为什么?有人说,因为当MySQL向前发展时,他们将以前只能在 MyISAM 中看到的大部分功能添加到 InnoDB中,从而实际上使MyISAM过时:

  • 自5.6版起,InnoDB中就提供了全文索引。
  • 从5.6版开始,InnoDB中就提供了可移植的表空间。
  • 空间索引自5.7版起在InnoDB中可用。
  • InnoDB自5.7版起提供了表的最终更新

那么,你还应该使用MyISAM吗?可能不会。但有一点需要注意,简单的 COUNT(*)查询在MyISAM上的执行速度可能会比在InnoDB上更快,MyISAM将表记录数存储在元数据中,而InnoDB不会。

我正在使用MyISAM,想切换到InnoDB,我该怎么做?

如果您仍然使用MyISAM并希望切换到InnoDB,只需将所有表转换为InnoDB即可。显然,说起来容易做起来难,但这里有一个简单的指南:

1.找出MySQL实例中的哪些表正在使用MyISAM:

  SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘database_name’ AND ENGINE = ‘MyISAM’;

2.将所有MyISAM表转换为InnoDB:

   ALTER TABLE `table_name` ENGINE = InnoDB;

如果不想一个接一个地运行多个ALTER TABLE语句,请考虑将ALTER STABLE语句放入循环中。就这样,转换完成!

小结

MyISAM是最受欢迎的 MySQL 存储引擎之一。该引擎是MySQL 5.5以下版本的默认引擎。该引擎是继InnoDB之后最流行的选择之一,但从MySQL 8.0开始,它就可以被称为过时了 – MySQL已经确保在使用InnoDB时,MyISAM可以完成的所有工作都可以完成,因此目前,只有当您希望简单的COUNT(*)查询更快时,MyISAM才非常有用。这样的查询会更快,因为MyISAM将表记录数数字存储在表元数据中–其他 MySQL 引擎则没有。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值