MySQL 数据库引擎

数据库引擎

本文转载自https://www.cnblogs.com/0201zcr/p/5296843.html

数据库引擎是用于存储、处理和保护数据的核心服务。

利用数据库引起可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。

使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。

这包括创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(如索引、视图和存储过程)。

MySQL数据库引擎类别

可以使用的数据库引擎取决于MySQL在安装的时候是如何被编译的。

要添加一个新的引擎,就必须重新编译MySQL。

InnoDB

默认的存储引擎(包括了对事物处理和外来建的支持);

是一个事务型的存储引擎,有行级锁定和外键约束。

InnoDB引擎提供了对数据库ACID事物的支持;

并且实现了SQL标准的四种隔离级别,MySQL运行时InnoDB会在内存中建立缓冲池,用于缓冲数据和索引。

InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比MyISAM还慢。但是它支持“行锁”,于是在写操作比较多的时候,会更优秀。并且,它还支持更多的高级应用;比如:事务。

MyISAM

MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。另外,MyISAM对于SELECT COUNT(*)这类的计算是超快无比的。

BERKLEYDB

HEAP

ISAM

Index–索引

索引是帮助MySQL搞笑获取数据的数据结构。MyISAM和InnoDB都使用了树这种数据结构作为索引。

MyISAM引擎的索引结构

MyISAM 引擎的索引结构为B+Tree,其中B+Tree的数据域存储的内容为实际数据的地址,也就是说它的索引和实际的数据时分开的,只不过是用索引指向了实际的数据,这种索引就是所谓的非聚集索引。如下图所示:

在这里插入图片描述

InnoDB引擎的索引结构

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

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

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

两者区别:

第一个重大区别是InnoDB的数据文件本身就是索引文件。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。

在这里插入图片描述

上图是InnoDB主索引(同时也是数据文件)的示意图,可以看到叶节点包含了完整的数据记录。这种索引叫做聚集索引。因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据几率的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整型。

第二个与MyISAM索引的不同是InnoDB的辅助索引data域存储相应记录主键的值而不是地址。换句话说,InnoDB的所有辅助索引都引用主键作为data域。例如:下图为定义在Col3上的一个辅助索引:

在这里插入图片描述

这里以英文字符的ASCII码作为比较准则。聚集索引这种实现方式使得按住键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中减速获得记录。

了解不同存储引擎的索引实现方式对于正确使用和优化索引都非常有帮助。例如:知道了InnoDB的索引实现后,就很容易明白为什么不建议使用过长的字段作为主键,因为所有辅助索引都引用主索引,过长的主索引会令辅助索引变得过大。再例如:用非单调(可能是指“非递增”的意思)的字段作为主键在InnoDB中不是个好主意,因为InnoDB数据文件本身是一颗B+Tree,非单调(可能是“非递增”的意思)的主键会造成在插入新记录时数据文件为了维持B+Tree的特性而频繁的分裂调整,十分低效,而使用自增字段作为主键则是一个很好的选择。

本文转载自https://www.cnblogs.com/0201zcr/p/5296843.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值