如何深层理解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)从表记录的排列顺序和索引的排列顺序是否一致来划分 聚集索引:表记录的排列顺序和索引的排列顺序一致。 非聚集索引:表记录的排列顺序和索引的排列顺序不一致。 (编辑:随州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |