我是靠谱客的博主 大力唇膏,最近开发中收集的这篇文章主要介绍mysql的存储引擎各种存储引擎特性,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

存储引擎就是存储数据,建立索引,更新查询数据等等技术的实现方式 。存储引擎是基于表的,而不是基于库的。所以存储引擎也可被称为表类型。

MySQL5.0支持的存储引擎包含 : InnoDB 、MyISAM 、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎是非事务安全表。

可以通过show engines

 show engines;
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
| Engine
| Support | Comment
| Transactions | XA
| Savepoints |
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
| CSV
| YES
| Stores tables as CSV files
| NO
| NO
| NO
|
| 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
|
| Aria
| YES
| Crash-safe tables with MyISAM heritage. Used for internal temporary tables and privilege tables | NO
| NO
| NO
|
| MyISAM
| YES
| Non-transactional engine with good performance and small data footprint
| NO
| NO
| NO
|
| SEQUENCE
| YES
| Generated tables filled with sequential values
| YES
| NO
| YES
|
| InnoDB
| DEFAULT | Supports transactions, row-level locking, foreign keys and encryption for tables
| YES
| YES
| YES
|
| PERFORMANCE_SCHEMA | YES
| Performance Schema
| NO
| NO
| NO
|
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
8 rows in set (0.000 sec)

ySQL5.5之前的默认存储引擎是MyISAM,5.5之后就改为了InnoDB。

各种存储引擎特性

下面重点介绍几种常用的存储引擎, 并对比各个存储引擎之间的区别, 如下表所示 :

特点InnoDBMyISAMMEMORYMERGENDB
存储限制64TB没有
事务安全支持
锁机制行锁(适合高并发)表锁表锁表锁行锁
B树索引支持支持支持支持支持
哈希索引支持
全文索引支持(5.6版本之后)支持
集群索引支持
数据索引支持支持支持
索引缓存支持支持支持支持支持
数据可压缩支持
空间使用N/A
内存使用中等
批量插入速度
支持外键支持

存储引擎是作用于表级别的,表创建时,可以指定不同的存储引擎,但我们一般建议统一存储引擎为InnoDB。

-- 查看指定库中表的引擎
SHOW TABLE STATUS FROM world;
-- 查看所有表的引擎
SELECT table_schema,table_name,ENGINE FROM information_schema.tables;

InnoDB

InnoDB存储引擎是Mysql的默认存储引擎。InnoDB存储引擎提供了具有提交、回滚、崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引。

InnoDB存储引擎不同于其他存储引擎的特点 :

页是InnoDB存储引擎管理数据库的最小磁盘单位。
 页类型为B-Tree node的页,存放的即是表中行的实际数据了。
 
 InnoDB中的页大小为16KB,且不可以更改
 
 InnoDB可以将一条记录中的某些数据存储在真正的数据页面之外,即作为行溢出数据。MySQL的varchar数据类型可以存放65535个字节,但
 实际只能存储65532个
 。同时InnoDB是B+树结构的,因此
 每个页中至少应该有两个行记录
 ,否则失去了B+树的意义,变成了链表,所以一行记录
 最大长度的阈值是8098
 ,如果大于这个值就会将其存到溢出行中。

由于MyISAM并不常用,我也不打算去深究其底层的一些原理和实现。我们在这里简单的对比一下这两个存储引擎的区别就好。我们分点来一点点描述。

  • 事务 InnoDB支持事务、回滚、事务安全和奔溃恢复。而MyISAM不支持,但查询的速度要比InnoDB更快
  • 主键 InnoDB规定,如果没有设置主键,就自动的生成一个6字节的主键,而MyISAM允许没有任何索引和主键的存在,索引就是行的地址
  • 外键 InnoDB支持外键,而MyISAM不支持
  • 表锁 InnoDB支持行锁表锁,而MyISAM只支持表锁
  • 全文索引 InnoDB不支持全文索引,但是可以用插件来实现相应的功能,而MyISAM是本身就支持全本索引
  • 行数 InnoDB获取行数时,需要扫全表。而MyISAM保存了当前表的总行数,直接读取即可。

所以,简单总结一下,MyISAM只适用于查询大于更新的场景,如果你的系统查询的情况占绝大多数(例如报表系统)就可以使用MyISAM来存储,除此之外,都建议使用InnoDB。

最后

以上就是大力唇膏为你收集整理的mysql的存储引擎各种存储引擎特性的全部内容,希望文章能够帮你解决mysql的存储引擎各种存储引擎特性所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部