老生常谈的数据库引擎到底是Who?

MySQL中的数据采用各种不同的技术存储在文件(或者内存)中。每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,我们能够获得额外的速度或者功能,从而改善喝提高应用的整体功能。

当我们理解了引擎这个概念,就会知道提供各种不同引擎给你选择,然后用你选出来的引擎去处理sql语句

MYSQL常用的四个数据库引擎:

(1) ISAM:ISAM是一个定义明确的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。

特性:

1.读取操作的速度很快

2.不占用大量的内存和存储资源

缺点:

不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。

(2) MyISAM:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。

特性:

1.不支持事物,MyISAM存储引擎不支持事物,所以对事物有要求的业务场景不能使用

2.表级锁定,其锁定机制是表级索引,这虽然可以让锁定的现实成本很小但也是同时大大降低了其并发性能

3.读写互相阻塞,不仅会在写入的时候阻塞读取,MyISAM还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读

4.只会缓存因素,MyISAM可以通过key_buffer缓存以大大提高访问性能减少磁盘IO,但这个缓存区只会缓存索引,而不会缓存数据

5.不能在表损坏后恢复数据。

适用场景

1.不需要事物支持(不支持事物)

2.并发相对较低(锁定机制问题)

3.数据修改相对较少(阻塞问题)

4.以读为主(快速读取操作效率高)

5.数据一致性要求不是非常高

(3) InnoDB:在使用MYSQL的时候,我们所要面对的问题都是ISAM和MyISAM数据库引擎不支持事务处理(transaction process)也不支持外来键。尽管要比ISAM和 MyISAM引擎慢很多,但是InnoDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。

特性:

1.具有较好的事物支持,支持4个事物隔离级别,支持多版本读

2.行级锁定,通过索引实现,全表扫描任然会是表锁,注意间隙锁的影响

3.读写阻塞与事物隔离级别有关

4.具有非常高效的缓存特性,能缓存索引,也能缓存数据

5.整个表和主键以Cluster方式存储,组成一颗平衡树

6.所有Secondary Index都会保存主键信息

适用场景

1.需要事物支持(具有较好的事物特性)

2.行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成

3.数据更新较为频繁的场景

4.数据一致性要求较高

5.硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽量减少磁盘IO

(4) MEMORY: MEMORY是MySQL中一类特殊的存储引擎。**它使用存储在内存中的内容来创建表,而且数据全部放在内存中。**这些特性与前面的两个很不同。每个基于MEMORY存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,类型为frm类型。该文件中只存储表的结构。而其数据文件,都是存储在内存中,这样有利于数据的快速处理,提高整个表的效率。值得注意的是,服务器需要有足够的内存来维持MEMORY存储引擎的表的使用。如果不需要了,可以释放内存,甚至删除不需要的表。MEMORY默认使用哈希索引。速度比使用B型树索引快。 Note: MEMORY用到的很少,因为它是把数据存到内存中,如果内存出现异常就会影响数据。如果重启或者关机,所有数据都会消失。

总结一下,在实际工作中,选择一个合适的存储引擎是一个比较复杂的问题,每个引擎都有自己的优缺点,往往是根据实际的业务场景来选择合适的引擎:

(1) InnoDB:支持事务处理(高并发),支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。

(2) MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用。

(3) MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。

Note:

同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择InnoDB。

这个数据库中可以将查询要求比较高的表选择MyISAM存储。

如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎。

那么问题来了,要对引擎做一些操作,要怎么做呢:

可以修改配置文件中的default-storage-engine。

可以通过:show variables like ‘default_storage_engine’;查看当前数据库到默认引擎

命令:show engines和show variables like 'have%'可以列出当前数据库所支持到引擎。其中Value显示为disabled的记录表示数据库支持此引擎,而在数据库启动时被禁用。

可以使用下面语句来查询哪些存储引擎支持事物处理:select engine from information_chema.engines where transactions =‘yes’;

可以通过engine关键字在创建或修改数据库时指定所使用到引擎。

在创建表的时候通过engine=…或type=…来指定所要使用的引擎。show table status from DBname来查看指定表的引擎。

以上是本农在近期的学习中的总结,希望各位看官给出宝贵意见~~

本文地址:https://blog.csdn.net/weixin_42777004/article/details/107658234

希望与广大网友互动??

点此进行留言吧!

mysql的底层运行原理,【数据库】震惊!!MySQL的底层原理竟然是这样相关推荐

  1. mysql 密码 特殊符号_MySQL数据库之mysql设置复杂密码中含$特殊符号导致无法命令行登录...

    本文主要向大家介绍了MySQL数据库之mysql设置复杂密码中含$特殊符号导致无法命令行登录 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 安全考虑 在设置MYSQL 密码时候 ...

  2. 阿里云mysql宽带_阿里云数据库RDS MySQL版购买使用详细过程

    阿里云数据库 RDS MySQL 版如何购买使用?通过前面学习如何选择阿里云数据库 RDS MySQL 版,魏艾斯博客已经阿里云 MySQL 有了初步认识,接下来跟着老魏一起购买使用阿里云数据库 RD ...

  3. mysql中leave和_MySQL数据库之Mysql存储过程使用LEAVE实现MSSQL存储过程中return语法

    本文主要向大家介绍了MySQL数据库之Mysql存储过程使用LEAVE实现MSSQL存储过程中return语法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. DELIMITER ...

  4. mysql connector c编程_MySQL数据库之MySQL Connector 编程

    本文主要向大家介绍了MySQL数据库之MySQL Connector 编程 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. MySQL Connector 是MySQL数据库客户 ...

  5. mysql 数据增量备份_MySQL数据库之mysql全量备份、增量备份实现方法

    本文主要向大家介绍了MySQL数据库之mysql全量备份.增量备份实现方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. mysql全量备份.增量备份.开启mysql的logb ...

  6. mysql select in 排序_MySQL数据库之Mysql select in 按id排序实现方法

    本文主要向大家介绍了MySQL数据库之Mysql select in 按id排序实现方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 表结构如下: mysql> sel ...

  7. mysql到底是什么_MySQL数据库之MySQL到底是什么

    本文主要向大家介绍了MySQL数据库之MySQL到底是什么 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. Mysql是一个数据库系统. 为了理解Mysql到底是什么,我们可以把 ...

  8. 【MySQL】Leetcode刷题--数据库(MySQL)常用的函数及语法

    Leetcode数据库(MySQL)常用的函数 日期函数 datediff() date_format() TimeStampDiff() period_add() extract() 字符串操作 t ...

  9. mysql倒序截取字符串_MySQL数据库之mysql截取字符串与reverse函数

    本文主要向大家介绍了MySQL数据库之mysql截取字符串与reverse函数 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 这个网页上很多知识点,可以学习下,关于mysql的 ...

  10. mysql中男生怎么表达,数据库之mysql

    1.安装mysql-server的命令:sudo apt-get install mysql-server 安装mysql-client客户端:sudo apt-get install mysql-c ...

最新文章

  1. McAfee安装后无法启动服务的解决办法
  2. jenkins 添加 k8s 云
  3. ubuntu 更换系统软件源 和 pip源
  4. MacOS option键-常用数学符号
  5. Parallax Mapping
  6. 一个div压在另一个div上面_【CSS小分享】用CSS画一个新拟态风格键盘
  7. :after伪类+content内容清除浮动
  8. android 高德amap开发一(地图创建)
  9. java基础教程第3版_java基础教程第3版习题解答
  10. 解决电脑上装了两个不同版本的sqlserver 导致索引越界等一系列问题。
  11. CorelDRAW VBA - 发布(导出)PDF文档
  12. 使用Graphics2D给图片加水印(图片+图标)
  13. Avazu_ctr_prediction 数据集之Avazu_x4.zip介绍
  14. 小程序实现瀑布流布局
  15. Android读取中文文件乱码解决方法
  16. 一名85后老程序员的真心话
  17. 【LOAM系列】一:LOAM论文及代码阅读笔记
  18. 安卓反编译就这么简单
  19. 西门子PN协议分布式IO模块
  20. 2020年10月27日 天学网14:50 视频面试 时长:15min

热门文章

  1. Atitit db access req数据库访问规范jdo jdbc jpa pdo sql 目录 1. 常见特性 1 1.1. 元数据 API 1 1.2. 分布式事务 vs事务中使用 Sav
  2. Atitit sql的执行功能 目录 1. 主要流程 1 1.1. 获取conn,执行sql取得结果, 1 1.2. Orm类的执行(hb mybatis为例 1 2. 常见sql执行框架与类库 1
  3. Atitit 资源清理之道与gc之道 gc算法 清理临时表 临时资源 使用的算法类型是 引用计数(reference counting),基于时间过期自动清理资源 1. 3.1. 从各种
  4. Atitit 知识体系概论 attilax著 三大类型 学术型 应用型 职业技术教育 1 附表1、CIP-2000学科群设置情况总表 1 三大层次 分类 学科 专业 2 20个知识大类 2 需
  5. Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结
  6. Atitit 视图状态ViewState)的原理与管理
  7. Atitit 管理原理与实践attilax总结
  8. paip.c++ 操作360浏览器总结..
  9. paip.System.out.println乱码解决
  10. Rust : chrono库,DateTime、FixedOffset等