MySQL学习笔记(七):存储引擎


存储引擎定义了什么?

参考百度百科-存储引擎

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。</br>
你可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储你的信息、如何检索这些信息以及你需要你的数据结合什么性能和功能的时候为你提供最大的灵活性。</br>
选择如何存储和检索你的数据的这种灵活性是MySQL为什么如此受欢迎的主要原因。其它数据库系统(包括大多数商业选择)仅支持一种类型的数据存储。遗憾的是,其它类型的数据库解决方案采取的“一个尺码满足一切需求”的方式意味着你要么就牺牲一些性能,要么你就用几个小时甚至几天的时间详细调整你的数据库。使用MySQL,我们仅需要修改我们使用的存储引擎就可以了。

可以这么来理解:MySQL是数据仓库,那它是怎么存的数据,采用的什么存储机制、用的哪种索引等等,这样就是存储引擎来决定的。它规定了一个表的类型,也就是存储引擎所描述的数据单元是表。

有哪些存储类型?

MySQL在版本5.5以后,默认存储引擎是InnoDB,之前版本的默认存储引擎是MyISAM。所以这两种应该是最为常用的,也是最应该去了解的。

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.18    |
+-----------+
1 row in set

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set

从上面可以看出MySQL对InnoDB的描述:支持事务、行级锁以及外键。这些都是MyISAM不支持的。
再来看官方文档对InnoDB的特性总结(Key Advantages of InnoDB):

属性 属性值 属性 属性值 属性 属性值
存储限制 64TB 事务 Yes 锁定粒度 Row
多版本并发控制 Yes Geospatial数据类型支持 Yes Geospatial索引支持 Yes[a]
B-tree索引 Yes T-tree索引 No Hash索引 No[b]
Full-text search索引 Yes[c] Clustered索引 Yes 数据缓存 Yes
索引缓存 Yes 数据压缩 Yes[d] 数据加密[e] Yes
集群数据库支持 No 主从复制支持[f] Yes 外键支持 Yes
备份/时间点恢复[g] Yes 查询缓存支持 Yes 数据字典的统计信息更新 Yes
a.InnoDB 在MySQL 5.7.5及以上版本支持Geospatial索引
b.InnoDB的自适应Hash索引特性的内部实现中使用了Hash索引
c.Barracuda 在MySQL 5.6.4及以上版本支持FULLTEXT索引
d.压缩InnoDB类型的表需要Barracuda文件格式
e.由服务器实现(通过加密函数). Data-at-rest tablespace encryption is available in MySQL 5.7 and later.
f.由服务器实现,而非存储引擎。
g.由服务器实现,而非存储引擎。

再来看官方对各种引擎的特性总结

特性 | MyISAM | Memory | InnoDB | Archive | NDB
--|--|--|--|--|--|--
存储限制 | 256TB | RAM | 64TB | None | 384EB
事务 | No | No | Yes | No | Yes
锁粒度 | Table | Table | Row | Row | Row
多版本并发控制| No | No | Yes | No | No
Geospatial数据类型支持 | Yes | No | Yes | Yes | Yes
Geospatial 索引支持 | Yes | No | Yes[a] | No | No
B-tree 索引| Yes | Yes | Yes | No | No
T-tree 索引| No | No | No | No | Yes
Hash 索引| No | Yes | No[b] | No | Yes
Full-text search 索引 | Yes | No | Yes[c] | No | No
Clustered 索引| No | No | Yes | No | No
数据缓存 | No | N/A | Yes | No | Yes
索引缓存 | Yes | N/A | Yes | No | Yes
数据压缩| Yes[d] | No | Yes[e] | Yes | No
数据加密[f] | Yes | Yes | Yes | Yes | Yes
集群数据库支持 | No | No | No | No | Yes
主从复制支持[g] | Yes | Yes | Yes | Yes | Yes
外键支持 | No | No | Yes | No | Yes[h]
备份/时间点恢复[i] | Yes | Yes | Yes | Yes | Yes
查询缓存支持 | Yes | Yes | Yes | Yes | Yes
数据字典的统计信息更新 | Yes | Yes | Yes | Yes | Yes

至此,对MySQL的存储引擎有概念的认识。

文字总结请参考MySQL 常用数据存储引擎区别

MyISAM
mysql 5.5.5 之前的默认引擎,支持 B-tree/FullText/R-tree 索引类型。锁级别为表锁,表锁优点是开销小,加锁快;缺点是锁粒度大,发生锁冲动概率较高,容纳并发能力低,这个引擎适合查询为主的业务。此引擎不支持事务,也不支持外键。MyISAM强调了快速读取操作。它存储表的行数,于是SELECT COUNT() FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。</br>
InnoDB
InnoDB 存储引擎最大的亮点就是支持事务,支持回滚,它支持 Hash/B-tree 索引类型。
锁级别为行锁,行锁优点是适用于高并发的频繁表修改,高并发是性能优于 MyISAM。缺点是系统消耗较大,索引不仅缓存自身,也缓存数据,相比 MyISAM 需要更大的内存。
InnoDB 中不保存表的具体行数,也就是说,执行 select count(
) from table时,InnoDB 要扫描一遍整个表来计算有多少行。支持事务,支持外键

未完待续

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容