MyISAM:
MyISAM 管理非事务表, 是 ISAM 的扩展格式. 除了提供 ISAM 里所没有的索引的字段管理等的大量功能, MyISAM 还使用一种表格锁定的机制, 来优化多个并发的读写操作. MyISAM 提供高速存储和检索, 以及全文搜索能力; 在 MYSQL5.5.5 版本及以下的所有 MYSQL 配置里被支持. 也是默认的存储引擎.
特性:
1: 不支持事务, 不具备 AICD 特性 (原子性, 一致性, 分离性, 永久性);
2: 表级别锁定形式 (更新数据时锁定整个表, 这样虽然可以让锁定的实现成本很小但是同时大大降低了其并发的性能);
3: 读写相互阻塞 (不仅会在写入的时候阻塞读取, 还会在读取的时候阻塞写入, 但是读取不会阻塞读取);
4: 只会缓存索引 (myisam 通过 key_buffer_size 来设置缓存索引, 提高访问性能较少磁盘 IO 的压力, 但是只缓存索引, 不缓存数据);
5: 读取速度快, 占用资源比较少;
6: 不支持外键约束, 只支持全文检索;
7: 是 MySQL5.5.5 版本之前的默认存储引擎;
应用场景:
1: 不需要事务支持的场景;
2: 读多或者写多的单一业务场景, 读写频繁的则不适合, 会阻塞;
3: 读写并发访问较低的业务;
4: 数据修改相对较少的业务;
5: 以读为主的业务 (如博客, 图片信息数据库, 用户数据库等);
6: 对数据的一致性要求不是很高的业务;
7: 服务器硬件资源相对比较差的机器;
调优精要:
1: 设置合适的索引 (缓存机制);
2: 调整读写优先权限, 根据业务需求, 确保重要操作更有执行权限;
3: 启用延时插入 (尽量批量插入, 降低写的频率);
4: 写数据的时候, 顺序操作, 让 insert 数据都写入到尾部, 减少阻塞;
5: 分解大的时间长的操作, 降低单个操作的阻塞时间;
6: 降低并发数 (减少数据库的访问, 高并发场景的话, 可以使用队列机制);
7: 对于静态更新不频繁的数据库数据, 充分利用 Query Cache 或者 Memcached 缓存服务, 极大可能的提高访问效率;
8:count 的时候, 只有 count(*) 会直接返回行数, 才是效率最高的; 带有 where 条件的 count 都需要进行全部数据的访问;
9: 可以配置主从数据库的时候, 主数据库使用 InnoDB, 从数据库使用 MyISAM, 进行读写分离;
存储:
在存储的时候, 每一个 MyISAM 的表都对应硬盘上的三个文件 (同一文件名, 不同扩展名):
.frm: 保存表的定义, 这个文件不是 MyISAM 引擎的一部分, 是数据库服务器的一部分;
.MYD: 保存表的数据;
.MYI: 保存表的索引文件;
(.MYD 和 .MYI 是 MyISAM 的关健点)
来源: https://www.cnblogs.com/laowenBlog/p/8405614.html