个人学习过程中总结,如有不同见解望交流。

存储引擎是什么?:MYSQL的存储引擎是为了解决不同业务的需求所提供的多种数据存储方式的选择。例如一个业务的数据要求支持事务,这时候就要选择可以支持事务的存储引擎。

MYSQL中设置存储引擎:例: create table table_name(column type) engine = Innodb;
修改存储引擎:例:alter table table_name engine = MyISAM;

  1. MYSQL中常用的存储引擎有:
    1)***InnoDB:
    - 特点:支持事务、外键。表的行数不会事先保存。 MYSQL的默认引擎
    - 锁:行级锁(可能死锁但并行效率高)
    - 适用情况 :(1)要求事务(2)表的查询和更新都非常频繁(3)对表的可靠性要求高
    2)*MYISAM:
    -特点 不支持事务、外键。表在count(
    )时行数事先保存直接读取。但在count(
    )有where条件时和innodb相同。在储存到本地时会保存成3个文件(.frm表的定义,.myd表的数据,.myi表的索引)
    -锁:表级锁,concurrent_insert=0/1/2 添加并行锁,效果分别是 不允许并行写/只允许表中没有空白时表尾并行插入/允许表尾并行插入 。读时不允许写操作,写时也不允许读,只能等待操作完成释放锁。并且在同时申请锁时写的优先度会高于读,甚至后申请的写会插队到读前。因此MYISAM不适合有大量读和写操作的情况,因为写会占用太多时间。但可以通过参数来控制读写优先级(也因此不会死锁)
    -适用情况:(1)做很多count 的计算;(2)插入不频繁,查询非常频繁;(3)没有事务。
    3)MERGE:
    -特点 merge是一组myisum表的组合,要求这些myisum的表结构完全相同。而且其增删改查操作本质上是对myisum表的操作。在删除merge表结构时,内部表的数据也不会发生变化
    -适用情况:Merge存储引擎使用场景对于服务器日志这种信息,一般常用的存储策略是将数据分成很多表,每个名称与特定时间端相关。
    4)MEMORY:
    -特点:速度快。因为memery表是基于系统内存来运行的,因此故障时数据会全部丢失。且数据只能用定长的数据类型。
    -适用情况:1.目标数据小且访问非常频繁、2.存放临时数据且立即需要使用 3.
    5)ARCHIVE :
    -特点:archive即归档的意思,具有压缩机制,储存数据量是最大的。但只支持插入和查找且速度慢。(现在也有索引机制了,速度快了一些)
    -适用情况:通常用来储存日志文件或记录等查询不频繁但量大、持久性高的数据。

如何选合适的存储引擎?

选择标准可以分为:

1、是否需要支持事务;
2、是否需要使用热备;
3、崩溃恢复,能否接受崩溃;
4、是否需要外键支持。