1、什么是数据库引擎

数据库引擎就是操作数据库的一段程序或程序段,用于存储、处理和保护数据的核心服务。

利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。数据库应用项目是通过数据库引擎与数据库链接的。

何为数据库引擎?简而言之,数据库引擎就是驱动各种数据库的程序,它负责处理数据库相关工作的整个核心部份。同样的,数据库应用项目的操作指令,均会通过数据库引擎的处理作用到数据库上。

MySQL是常用的数据库软件。它有诸多的优点,如开源的,免费的等。其实它还有一个很好的特点,那就是有多种引擎可以供你选择。MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。MYSQL常用2个引擎分别是MyISAMInnoDB

2、MyISAM

在MySQL 5.5.8版本之前,MyIASM是默认存储引擎,但它没有提供对数据库事务的支持,也不支持行锁和外键,因此当INSERT或UPDATE数据时即写操作需要锁定整个表,效率便会低些,MyISAM主要面向一些OLAP(On-Line Analytical Processing)应用。

不过和Innodb不同,MyIASM中存储了表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已保存好的值而不用全表扫描。如果表的读操作远远多于写操作且不需要数据库事务支持,那么MyIASM也是很好的选择。

此外,MyISAM另外一个与众不同的地方在于,它的缓冲只缓冲索引文件,而不缓冲数据文件,这点和大多数数据库都非常不同。

MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。MyISAM的索引方式也叫“非聚集”的,这么称呼是为与InnoDB的聚集索引区分。下图是MyISAM主键索引的原理图:

3、InnoDB

MySQL 5.5.8开始,默认的存储引擎为InnoDB。Innodb引擎提供对数据库ACID事务的支持,且实现了SQL标准的四种隔离级别,其设计目标主要面向OLTP(On-Line Transaction Processing)的应用。

该引擎还提供了行锁和外键约束,支持一致性的非锁定读,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL后台的完整数据库系统,MySQL运行时Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但该引擎不支持FULLTEXT类型的索引,且没有保存表的行数,当SELECT COUNT(*) FROM TABLE时要扫描全表。

当要使用数据库事务时,该引擎是首选。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率。

但使用行级锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表。

Innodb引擎的索引结构同样也是B+Tree,但Innodb的索引文件本身就是数据文件,即B+Tree的数据域存储的就是实际的数据,这种索引就是聚集索引。这个索引的key就是数据表的主键,因此InnoDB表数据文件本身就是主索引。

因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。

并且和MyISAM不同,InnoDB的辅助索引数据域存储的也是相应记录主键的值而不是地址,所以当以辅助索引查找时,会先根据辅助索引找到主键,再根据主键索引找到实际的数据。

所以Innodb不建议使用过长的主键,否则会使辅助索引变得过大。建议使用自增的字段作为主键,这样B+ Tree的每一个结点都会被顺序的填满,而不会频繁的分裂调整,可以有效的提升插入数据的效率。Innodb的主键索引和辅助索引如下图所示:

InnoDB 表是基于聚簇索引建立的。因此InnoDB 的索引能提供一种非常快速的主键查找性能。不过,它的辅助索引(Secondary Index, 也就是非主键索引)也会包含主键列,所以,如果主键定义的比较大,其他索引也将很大。如果想在表上定义 、很多索引,则争取尽量把主键定义得小一些。InnoDB 不会压缩索引。

4、MyISAM与InnoDB的区别

InnoDB和MyISAM是使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。

基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

以下是一些细节和具体实现的差别:

(1)InnoDB不支持FULLTEXT类型的索引;
(2)InnoDB 中不保存表的具体行数,也就是说,执行select count(*) fromtable时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含where条件时,两种表的操作是一样的;
(3)对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
(4)DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除;
(5)LOAD TABLE FROMMASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但对于使用的额外的InnoDB特性(例如外键)的表不适用。
(5)主索引的区别,InnoDB的数据文件本身就是索引文件,而MyISAM的索引和数据是分开的。
(6)辅助索引的区别:InnoDB的辅助索引data域存储相应记录主键的值而不是地址。而MyISAM的辅助索引和主索引没有多大区别。

  • MyISAM适合:

(1)做很多count 的计算;
(2)插入不频繁,查询非常频繁;
(3)没有事务。

  • InnoDB适合:

(1)要求事务;
(2)表更新和查询频繁
(3)大尺寸的数据集趋向于选择InnoDB引擎,因为它支持事务处理和故障恢复。数据库的大小决定了故障恢复的时间长短,InnoDB可以利用事务日志进行数据恢复,这比较快。

MySQL的数据库引擎介绍相关推荐

  1. mysql数据库引擎介绍

    mysql数据库引擎介绍 你能用的数据库引擎取决于mysql在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HE ...

  2. MySQL数据库引擎介绍、区别、创建和性能测试的深入分析

    深入理解MySQL的数据库引擎的类型 作者: 字体:[增加 减小] 类型:转载 本篇文章是对MySQL的数据库引擎的类型进行了详细的分析介绍,需要的朋友参考下   你能用的数据库引擎取决于mysql在 ...

  3. mysql 修改引擎_修改MySQL的数据库引擎为INNODB的方法

    本文主要介绍了修改MySQL的数据库引擎为INNODB的方法,希望能对您有所帮助. 对于MySQL数据库,如果你要使用事务以及行级锁就必须使用INNODB引擎.如果你要使用全文索引,那必须使用myis ...

  4. 关于各个数据库的常用数据库引擎介绍

    关于各个数据库的常用数据库引擎介绍 数据库引擎好比汽车的发动机,当访问数据库时,无论通过何种方式访问,都会先经过数据库引擎,由数据库引擎去解释sql语句,并返回你需要查找的值,由此可以说数据库引擎是数 ...

  5. 【腾讯面试题】MySQL常用数据库引擎

    MySQL常用数据库引擎 MyISAM存储引擎 InnoDB存储引擎 MEMORY存储引擎 存储引擎的选择 查看MySQL数据库使用的引擎 SHOW ENGINES; 查看数据库默认使用哪个引擎 SH ...

  6. MySQL常用数据库引擎

    MySQL常用数据库引擎 查看MySQL数据库使用的引擎 SHOW ENGINES; 查看数据库默认使用哪个引擎 SHOW VARIABLES LIKE 'storage_engine'; MyISA ...

  7. MySQL的几种数据库引擎介绍

    1.什么是数据库引擎 2.MyISAM 3.InnoDB 4.MyISAM与InnoDB的区别 1.什么是数据库引擎 数据库引擎就是操作数据库的一段程序或程序段,用于存储.处理和保护数据的核心服务.利 ...

  8. mysql 数据库引擎介绍_MYSQL 数据库引擎介绍

    一般来说,MySQL有以下几种引擎:ISAM.MyISAM.HEAP.InnoDB和Berkley(BDB).注意:不同的版本支持的引擎是有差异的.当然啦,如果你感觉自己的确技术高超,你还能够使用My ...

  9. MySQL之数据库引擎及修改引擎的方法

    一.MySQL引擎介绍 数据库存储引擎是数据库重要的存储机制,数据库管理系统主要是使用数据引擎进行创建.查询.更新和删除数据. 不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存 ...

最新文章

  1. python现在好找工作吗-Python就业前景如何?培训后好找工作吗?
  2. AVP 6目GoPro全景拼接
  3. 小米人员架构调整:组建中国区,王川任总裁
  4. morse java_华威MORSE,华威数统那个比较好?
  5. 现代软件工程系列 结对编程 (II) 电梯调度程序新需求
  6. 清华裴丹:AIOps落地路线图
  7. 通过conda或者pip安装包时出现There was a problem confirming the ssl certificate报错
  8. mysql 对象名无效_数据库 表 对象名无效
  9. 【面经】兴业证券大数据工程师面经
  10. 马斯克要买地当「城主」/ 苹果手表引入ChatGPT/ 小鹏辟谣多名核心高管离职…今日更多新鲜事在此...
  11. matplotlib 绘制三角函数图像
  12. python时钟代码_python时钟 - 『编程语言区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn...
  13. C语言简单编程案例——(五)
  14. 幂函数与指数函数的近似
  15. 如何在服务器上配置深度学习环境
  16. cocos2d-js 手游解密jsc和WebSocket数据aes加密解密分析②
  17. 阿里菜鸟架构师:如何设计能抗住“双11”的交易系统架构?
  18. 使用selenium抓取1688供应商
  19. 计算机课程设计答辩评语,【课程设计教师评语】_课程设计指导教师评语模板...
  20. 批量修改文件名去括号,没有括号的方法

热门文章

  1. nacos安装配置和单机部署教程
  2. 部署和访问HTTP接口
  3. 数学建模案例--基于微分方程的酒后驾车问题浅析
  4. shell判断大于、小于、等于
  5. kodu_Kodu教您的孩子直观地编程自己的视频游戏
  6. 用python画小狗,用turtle画个单身狗送给自己~
  7. android常用代码合集,Android常用代码
  8. DevOps方法论掌握这四点,实践出真知
  9. 李宏毅机器学习课程 思维导图
  10. 车企围攻整车OS,这张“新王牌”怎么打?