加入收藏 | 设为首页 | 会员中心 | 我要投稿 随州站长网 (https://www.0722zz.cn/)- 数据可视化、数据开发、智能机器人、智能内容、图像分析!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

如何深层理解MySQL索引

发布时间:2022-01-13 14:22:59 所属栏目:MySql教程 来源:互联网
导读:这篇文章将为大家详细讲解有关如何深入理解MySQL索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 前言 当提到MySQL数据库的时候,我们的脑海里会想起几个关键字:索引、事务、数据库锁等等,索引
     这篇文章将为大家详细讲解有关如何深入理解MySQL索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
 
前言
     当提到MySQL数据库的时候,我们的脑海里会想起几个关键字:索引、事务、数据库锁等等,索引是MySQL的灵魂,是平时进行查询时的利器,也是面试中的重中之重。
 
     可能你了解索引的底层是b+树,会加快查询,也会在表中建立索引,但这是远远不够的,这里列举几个索引常见的面试题:
 
1、索引为什么要用b+树这种数据结构?
 
2、聚集索引和非聚集索引的区别?
 
3、索引什么时候会失效,最左匹配原则是什么?
 
当遇到这些问题的时候,可能会发现自己对索引还是一知半解,今天我们一起学习MySQL的索引。
 
一、一条查询语句是如何执行的
首先来看在MySQL数据库中,一条查询语句是如何执行的,索引出现在哪个环节,起到了什么作用。
 
1.1 应用程序发现SQL到服务端
当执行SQL语句时,应用程序会连接到相应的数据库服务器,然后服务器对SQL进行处理。
 
1.2 查询缓存
接着数据库服务器会先去查询是否有该SQL语句的缓存,key是查询的语句,value是查询的结果。如果你的查询能够直接命中,就会直接从缓存中拿出value来返回客户端。
 
注:查询不会被解析、不会生成执行计划、不会被执行。
 
1.3 查询优化处理,生成执行计划
如果没有命中缓存,则开始第三步。
 
解析SQL:生成解析树,验证关键字如select,where,left join 等)是否正确。
预处理:进一步检查解析树是否合法,如检查数据表和列是否存在,验证用户权限等。
优化SQL:决定使用哪个索引,或者在多个表相关联的时候决定表的连接顺序。紧接着,将SQL语句转成执行计划。
1.4 将查询结果返回客户端
最后,数据库服务器将查询结果返回给客户端。(如果查询可以缓存,MySQL也会将结果放到查询缓存中)
  
这就是一条查询语句的执行流程,可以看到索引出现在优化SQL的流程步骤中,接下来了解索引到底是什么?
 
二、索引概述
先简单地了解一下索引的基本概念。
 
2.1 索引是什么
索引是帮助数据库高效获取数据的数据结构。
 
2.2 索引的分类
1)从存储结构上来划分
Btree索引(B+tree,B-tree)
哈希索引
full-index全文索引
RTree
2)从应用层次上来划分
普通索引:即一个索引只包含单个列,一个表可以有多个单列索引。
唯一索引:索引列的值必须唯一,但允许有空值。
复合索引:一个索引包含多个列。
3)从表记录的排列顺序和索引的排列顺序是否一致来划分
聚集索引:表记录的排列顺序和索引的排列顺序一致。
非聚集索引:表记录的排列顺序和索引的排列顺序不一致。

(编辑:随州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读