1.MySQL的索引有哪些
索引在什么层面:
索引是在存储引擎层实现的,而不是在服务器层实现的,所以不同存储引擎具有不同的索引类型和实现。
B+树索引:是大多数 MySQL 存储引擎的默认索引类型。
哈希索引:哈希索引能以 O(1) 时间进行查找,但是失去了有序性;InnoDB 存储引擎有一个特殊的功能叫“自适应哈希索引”,当某个索引值被使用的非常频繁时,会在 B+Tree 索引之上再创建一个哈希索引,这样就让 B+Tree 索引具有哈希索引的一些优点,比如快速的哈希查找。
全文索引:MyISAM 存储引擎支持全文索引,用于查找文本中的关键词,而不是直接比较是否相等。查找条件使用 match against,而不是普通的 WHERE。全文索引一般使用倒排索引实现,它记录着关键词到其所在文档的映射。InnoDB 存储引擎在 MySQL 5.6.4 版本中也开始支持全文索引。
空间数据索引:MyISAM 存储引擎支持空间数据索引(R-Tree),可以用于地理数据存储。空间数据索引会从所有维度来索引数据,可以有效地使用任意维度来进行组合查询。
2.什么是B+树,为什么B+树成为主要SQL数据库的索引实现
B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具有 B Tree 的平衡性,并且通过顺序访问指针来提高区间查询的性能。在 B+ Tree 中,一个节点中的 key 从左到右非递减排列,如果某个指针的左右相邻 key 分别是 keyi 和 keyi+1,且不为 null,则该指针指向节点的所有 key 大于等于 keyi 且小于等于 keyi+1。
3.什么是关系型数据库
关系型数据库:一种建立在关系上的数据库,关系模型表明了数据库中所存储数据之间的联系。是指采用了关系模型来组织数据的数据库,以行和列形式存储数据,以便用户理解。
常见关系型数据库:MySQL、PostgreSQL、Oracle、SQL Server、SQLite
什么是SQL:SQL是一种结构化查询语言,专门用来与数据库打交道,目的是提供一种从数据库中读写数据的简单有效的方法。
什么是MySQL:MySQL是一种关系型数据库,主要用于持久化存储我们的系统中的一些数据。
4.MySQL有什么优点?为什么如此流行?
成熟稳定、功能完善。
开源免费
文档丰富
开箱即用
支持分库分表,读写分离
5.一个 SQL 语句在 MySQL 中的执行流程:
·连接器:身份认证和权限相关(登录 MySQL 的时候)。
·查询缓存:执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。
·分析器:没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了就是要先看你的 SQL 语句要干嘛,再检查你的 SQL 语句语法是否正确。
·优化器:按照 MySQL 认为最优的方案去执行。
·执行器:执行语句,然后从存储引擎返回数据。
6. 从准备更新一条数据到事务的提交流程描述
(1)首先执行器根据 MySQL 的执行计划来查询数据,先是从缓存池中查询数据,如果没有就会去数据库中查询,如果查询到了就将其放到缓存池中
(2)在数据被缓存到缓存池的同时,会写入undo log日志文件
(3)更新动作是在BufferPool中完成的,同时会将更新后的数据添加到redo log buffer中
(4)完成以后就可以提交事务,在提交的同时会做以下三件事:
(5)将redo log buffer中的数据刷入到redo log文件中
(6)将本次操作记录写入到bin log文件中
(7)将bin log文件名字和更新内容在bin log中的位置记录到redo log中,同时在redo log最后添加commit标记
总结-
· MySQL主要分为Server层和引擎层,Server 层主要包括连接器、查询缓存、分析器、优化器、执行器,同时还有一个日志模块(binlog),这个日志模块所有执行引擎都可以共用,redolog只有InnoDB有。
· 引擎层是插件式的,目前主要包括,MyISAM,InnoDB,Memory 等。
· 查询语句的执行流程如下:权限校验(如果命中缓存)--->查询缓存--->分析器--->优化器--->权限校验--->执行器--->引擎
· 更新语句执行流程如下:分析器---->权限校验---->执行器--->引擎---redo log(prepare 状态)--->binlog--->redo log(commit状态)