MySQL学习笔记(一)存储引擎选择

本文深入介绍了MySQL中的六种主要存储引擎:MyISAM、InnoDB、CSV、Archive、Memory和Federated的特点与应用场景,对比了MyISAM与InnoDB之间的关键区别,并探讨了亿级大表对InnoDB的影响。
摘要由CSDN通过智能技术生成

在MySQL中有很多存储引擎,每种存储引擎大相径庭,那么又改如何选择呢?本文就将带你深入了解MySQL各种存储引擎。

MySQL 5.5以前的默认存储引擎是MyISAM, MySQL 5.5之后的默认存储引擎是InnoDB

特点MyISANBDBMemoryInnoDBArchive
存储限制没有没有64TB没有
事务安全支持支持
锁机制表锁页锁表锁行锁行锁
B树索引支持支持支持支持
哈希索引支持支持
全文索引支持
集群索引支持
数据缓存支持支持
索引缓存支持支持支持
数据可压缩支持支持
空间使用N/A非常低
内存使用中等
批量插入的速度非常高
支持外键支持

1. MyISAM

MySQL 5.5版本之前的默认存储引擎,在5.0以前最大表存储空间最大4G5.0以后最大256TB

Myisam存储引擎由.myd(数据)和 .myi(索引文件)组成,.frm文件存储表结构(所以存储引擎都有)

特性

  • 并发性和锁级别 (对于读写混合的操作不好,为表级锁,写入和读互斥)
  • 表损坏修复
  • myisam表支持的索引类型(全文索引…)
  • myisam支持表压缩(压缩后,此表为只读,不可以写入。使用myisampack压缩)

应用场景

  • 没有事务
  • 只读类应用(插入不频繁,查询非常频繁)
  • 空间类应用(唯一支持空间函数的引擎)
  • 做很多count 的计算

2. InnoDB

MySQL 5.5及之后版本的默认存储引擎

特性

  • Innodb为事务性存储引擎
  • 完全支持事物的ACID特性
  • Redo log (实现事务的持久性) 和Undo log(为了实现事务的原子性,存储未完成事务log,用于回滚)
  • Innodb支持行级锁
  • 行级锁可以最大程度的支持并发
  • 行级锁是由存储引擎层实现的

应用场景

  • 可靠性要求比较高,或者要求事务
  • 表更新和查询都相当的频繁,并且行锁定的机会比较大的情况。

独立表空间和系统表空间应该如何抉择呢?

两者比较

  • 系统表空间:无法简单的收缩大小(这很恐怖,会导致ibdata1一直增大,即使删除了数据也不会变小)
  • 独立表空间:可以通过optimize table 命令收缩系统文件
  • 系统表空间:会产生I/O瓶颈(因为只有一个文件)
  • 独立表空间:可以向多个文件刷新数据

总结
强烈建议:对Innodb引擎使用独立表空间(mysql5.6版本以后默认是独立表空间)

系统表转移为独立表的步骤(非常繁琐)

  • 使用mysqldump导出所有数据库表数据
  • 停止mysql服务,修改参数,并且删除Innodb相关文件
  • 重启mysql服务,重建mysql系统表空间
  • 重新导入数据

3. CSV

文件系统存储特点

  • 数据以文本方式存储在文件中
  • .csv文件存储表内容
  • .csm文件存储表的元数据,如表状态和数据量
  • .frm存储表的结构

CSV存储引擎特点

  • 以CSV格式进行数据存储
  • 所有列 必须都是不能为NULL
  • 不支持索引
  • 可以对数据文件直接编辑(其他引擎是二进制存储,不可编辑)

引用场景

  • 作为数据交换的中间表

4. Archive

特性

  • 以zlib对表数据进行压缩,磁盘I/O更少
  • 数据存储在ARZ为后缀的文件中(表文件为a.arza.frm
  • 只支持insert 和 select 操作(不可以delete 和update,会提示没有这个功能)
  • 只允许在自增ID列上加索引

应用场景

  • 日志和数据采集类应用

5. Memory

特性

  • 也称为HEAP存储引擎,所以数据保存在内存中(数据库重启后会导致数据丢失)

  • 支持HASH索引(等值查找应选择HASH)和BTree索引(范围查找应选择)

  • 所有字段都为固定长度,varchar(10) == char(10)
  • 不支持BLOG和TEXT等大字段
  • Memory存储使用表级锁(性能可能不如innodb)
  • 最大大小由max_heap_table_size参数决定
  • Memory存储引擎默认表大小只有16M,可以通过调整max_heap_table_size参数

应用场景

  • 用于查找或是映射表,例如右边和地区的对应表
  • 用于保存数据分析中产生的中间表
  • 用于缓存周期性聚合数据的结果表

注意: Memory数据易丢失,所以要求数据可再生

6. Federated

特性

  • 提供了访问远程mysql服务器上表的方法
  • 本地不存储数据,数据全部放在远程服务器上

使用 Federated

默认是禁止的。如果需要启用,需要在启动时增加Federated参数

★思考题

如何选择存储引擎?

参考条件:

  • 是否需要事务
  • 是否可以热备份
  • 崩溃恢复
  • 存储引擎的特有特性

重要一点: 不要混合使用存储引擎
强烈推荐: Innodb

MyISAM和InnoDB引擎的区别?

区别:

  • MyISAM不支持外键,而InnoDB支持
  • MyISAM是非事务安全型的,而InnoDB是事务安全型的。
  • MyISAM锁的粒度是表级,而InnoDB支持行级锁定。
  • MyISAM支持全文类型索引,而InnoDB不支持全文索引。
  • MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。
  • MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。
  • InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。

应用场景:

  • MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那
    么MyISAM是更好的选择。
  • InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT
    或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。

为什么不建议innodb使用亿级大表

为什么不建议innodb使用亿级大表 | 峰云就她了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值