我是靠谱客的博主 清秀丝袜,最近开发中收集的这篇文章主要介绍CC00141.bigdatajava——|Java&MySQL.高级.V13|——|MySQL.v13|常见三种存储引擎|,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
一、[常见的三种存储引擎]:存储引擎
### --- 常见的3种存储引擎
### --- 查看MySQL数据的存储引擎有哪些
~~~ # MySQL给用户提供了很多种类的存储引擎, 主要分两大类:
——> 事务安全表: InnoDB
——> 非事务安全表: MyISAM、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等。
SHOW ENGINES;
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 |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
### --- 查看当前的默认存储引擎 (MySQL5.7 默认使用 InnoDB)
SHOW VARIABLES LIKE '%default_storage_engine%';
mysql> SHOW VARIABLES LIKE '%default_storage_engine%';
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
### --- 在MySQL中,不需要整个服务器都是用同一种引擎,针对具体的需求,
~~~ 可以对 每一个表使用不同的存储引擎 .并且想要进一步优化, 还可以自己编写一个存储引擎.
-- 创建新表时指定存储引擎
create table(...) engine=MyISAM;
二、InnoDB(推荐)
### --- InnoDB
——> InnoDB是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用,
——> 为用户操作非常大的数据存储提供了一个强大的解决方案。
——> InnoDB还引入了行级锁定和外键约束,在以下场合下,使用InnoDB是最理想的选择
### --- 优点
——> Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别
——> 支持多版本并发控制的行级锁,由于锁粒度小,写操作和更新操作并发高、速度快。
——> 支持自增长列。
——> 支持外键。
——> 适合于大容量数据库系统,支持自动灾难恢复。
### --- 缺点
——> 它没有保存表的行数,当SELECT COUNT(*) FROM TABLE时需要扫描全表
### --- 应用场景
——> 当需要使用数据库事务时,该引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率
——> 更新密集的表, InnoDB存储引擎特别适合处理多重并发的更新请求。
三、 MyISAM
### --- My了SAM
——> MyISAM引擎, 不支持事务、也不支持外键,优势是访问速度快,
——> 对事务完整性没有 要求或者以select,insert为主的应用基本上可以用这个引擎来创建表
### --- 优点
——> MyISAM表是独立于操作系统的,这说明可以轻松地将其从Windows服务器移植到Linux服器。
——> MyISAM存储引擎在查询大量数据时非常迅速,这是它最突出的优点
——> 另外进行大批量插入操作时执行速度也比较快。
### --- 缺点
——> MyISAM表没有提供对数据库事务的支持。
——> 不支持行级锁和外键。
——> 不适合用于经常UPDATE(更新)的表,效率低。
### --- 应用场景
——> 以读为主的业务,例如:图片信息数据库,博客数据库,商品库等业务。
——> 对数据一致性要求不是非常高的业务(不支持事务)
——> 硬件资源比较差的机器可以用 MyiSAM (占用资源少)
四、MEMORY
### --- MEMORY
——> MEMORY的特点是 将表中的数据放在内存中,适用于存储临时数据的临时表和数据仓库中的纬度表
### --- 优点
——> memory类型的表访问非常的快,因为它的数据是放在内存中的
### --- 缺点
——> 一旦服务关闭,表中的数据就会丢失掉。
——> 只支持表锁,并发性能差,不支持TEXT和BLOB列类型,存储varchar时是按照char的方式
### --- 应用场景
——> 目标数据较小,而且被非常频繁地访问。
——> 如果数据是临时的,而且要求必须立即可用,那么就可以存放在内存表中。
——> 存储在Memory表中的数据如果突然丢失,不会对应用服务产生实质的负面影响。
五、如何选择存储引擎
### --- 如何选择存储引擎
~~~ 不同的存储引擎都有各自的特点,以适应不同的需求,如表所示。
~~~ 为了做出选择,首先要考虑每一个存储引擎提供了哪些不同的功能。
特性 | InnoDB | MyISAM | MEMORY |
存储限制(Storage limits) | 64TB | No | Yes |
支持事物(Transactions) | Yes | No | No |
锁机制(Locking granularity) | 行锁 | 表锁 | 表锁 |
B树索引(B-tree indexes) | Yes | Yes | Yes |
哈希索引(Hash indexes) | Yes | No | Yes |
外键支持(Foreign key support) | Yes | No | No |
存储空间消耗(Storage Cost) | 高 | 低 | 低 |
内存消耗(Memory Cost) | 高 | 低 | 高 |
批量数据写入效率(Bulk insert speed) | 慢 | 快 | 快 |
### --- 提供几个选择标准,然后按照标准,选择对应的存储引擎
——> 是否需要支持事务;
——> 崩溃恢复,能否接受崩溃;
——> 是否需要外键支持;
——> 存储的限制;
——> 对索引和缓存的支持;
最后
以上就是清秀丝袜为你收集整理的CC00141.bigdatajava——|Java&MySQL.高级.V13|——|MySQL.v13|常见三种存储引擎|的全部内容,希望文章能够帮你解决CC00141.bigdatajava——|Java&MySQL.高级.V13|——|MySQL.v13|常见三种存储引擎|所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复