返回顶部
首页 > 资讯 > 数据库 >MySQL进阶之索引
  • 767
分享到

MySQL进阶之索引

MySQL索引 2023-04-09 16:04:26 767人浏览 独家记忆
摘要

目录索引概述介绍特点索引结构索引进化的过程B-Tree索引概述 介绍 索引(index)是帮助mysql高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足 特定查找算法的数据结构,这些数据结构以某种方式引

索引概述

介绍

索引(index)是帮助mysql高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足 特定查找算法数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构 上实现高级查找算法,这种数据结构就是索引。

索引就是一种数据结构,这种结构类似,链表,树等等。但是比它们要复杂的多。

为什么要用索引呢?

假如我们有如下数据

MySQL进阶之索引

如果我们要查询年龄=45的全部信息。

select * from tb_user where age = 45;

那么sql是如何查询呢?

Mysql需要进行全表扫描,然后对比每条数据中的age值是否是45。

加入我们要100个数据,那你继续全表扫描找出age = 45;岂不是太麻烦了?

这是你是否想起来数据结构中二叉搜索树?我们将age的值映射到这个二叉搜索树上,那么我们就可以快速查找到我们要的结果。age 到二叉搜索树的过程就是索引。

注意:我们仅仅用二叉搜索树举例子,想信你肯定知道mysql中的索引肯定比这个复杂。

此时我们对索引的理解更加深入了,索引仅仅是建立了一个数据结构,把数据存入到这个结构上,方便MySQL查找数据罢了。

MySQL进阶之索引

特点

MySQL进阶之索引

索引结构

MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的索引结构,主要包含以下几种

MySQL进阶之索引

上述是MySQL中所支持的所有的索引结构,接下来,我们再来看看不同的存储引擎对于索引结构的支持 情况。

MySQL进阶之索引

我们主要看InnoDB就可以了,因为MyISAM会被mongoDB代替,Memory会被Redis代替。

我们一般指的索引是指的是B+tree。

当然B+tree肯定不是一上来就提出来的,肯定是有一个进化的过程。

索引进化的过程

我们都知道二叉搜索树是一个方便存储的结构,因为其天然的排序。左子树都小于中间节点,右子树都大于中间节点。

MySQL进阶之索引

但是它有什么缺点呢?在极端情况下会退化成链表。查找时间复杂度O(n),这不就等效于全表查询了?

MySQL进阶之索引

如何克服呢?使用红黑树,因为它是一种平衡二叉树。可以避免出现链表这种极端情况。

MySQL进阶之索引

那么是不是使用红黑树就可以了?答案:还是不行,不够理想。

为什么呢?因为是二叉树,如果MySQL中数据过多,那么将会出现树的层级过深。

我们知道数据以Page为单位存入的,在Page切换查询时会出现磁盘io操作。层级过深就会造成IO频繁。

如何解决上述问题呢?B-Tree出场。

B-Tree

B-Tree,B树是一种多叉路衡查找树,相对于二叉树,B树每个节点可以有多个分支,即多叉。 以一颗最大度数(max-degree)为5(5阶)的b-tree为例,那这个B树每个节点最多存储4个key(每个key都可以存放数据),5 个指针:

MySQL进阶之索引

MySQL进阶之索引

MySQL进阶之索引

是不是使用b树就可以了呢?原则上是可以了,但是还有一种更优的方案B+Tree 代替了BTree。

MySQL中的B+Tree 和BTree有什么不同呢?

  • B+Tree只在叶子节点存储数据,从而保证每个Page中存入更多的key。
  • 叶子节点包含了根节点和非叶子节点--图中红框显示。
  • 叶子节点采用双向循环链表连接,方便查找。

MySQL进阶之索引

 因此我们可以回答:为什么MySQL采用B+Tree呢?

MySQL进阶之索引

到此这篇关于MySQL进阶之索引的文章就介绍到这了,更多相关MySQL索引内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL进阶之索引

本文链接: https://lsjlt.com/news/201399.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL进阶之索引
    目录索引概述介绍特点索引结构索引进化的过程B-Tree索引概述 介绍 索引(index)是帮助mysql高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足 特定查找算法的数据结构,这些数据结构以某种方式引...
    99+
    2023-04-09
    MySQL索引
  • SQL Server高级进阶之索引碎片
    一、产生原因及影响 索引是数据库引擎中针对表(有时候也针对视图)建立的特别数据结构,用来帮助查找和整理数据,它的重要性体现在能够使数据库引擎快速返回查询结果。当对索引所在的基础数据表进行增删改时,若存储的数据进行了不适当的跨页(SQL S...
    99+
    2020-09-09
    SQL Server高级进阶之索引碎片
  • SQL Server高级进阶之索引优化
    1.1、查找缺失索引 SELECT A.USER_SEEKS 查找次数,A.USER_SCANS 扫描次数, ROUND(A.AVG_TOTAL_USER_COST,2) 减少的用户查询的平均成本,A.AVG_USER_...
    99+
    2016-07-26
    SQL Server高级进阶之索引优化
  • 【MySQL进阶教程】 索引详细介绍
    前言 本文为 【MySQL进阶教程】 索引 相关知识介绍,下边具体将对索引概述,索引结构(包括:索引结构概述,二叉树,B-Tree,B+Tree,Hash),索引分类,索引语法(包括:创建索引,查看...
    99+
    2023-10-03
    mysql java 数据库
  • SQL Server高级进阶之索引碎片维护
    一、产生原因及影响 索引是数据库引擎中针对表(有时候也针对视图)建立的特别数据结构,用来帮助查找和整理数据,它的重要性体现在能够使数据库引擎快速返回查询结果。当对索引所在的基础数据表进行增删改时,若存储的数据进行了不适当的跨页(SQL S...
    99+
    2020-06-22
    SQL Server高级进阶之索引碎片维护
  • SQL Server高级进阶之索引优化查询
    1.1、查找缺失索引 SELECT A.USER_SEEKS 查找次数,A.USER_SCANS 扫描次数, ROUND(A.AVG_TOTAL_USER_COST,2) 减少的用户查询的平均成本,A.AVG_USER_...
    99+
    2014-08-11
    SQL Server高级进阶之索引优化查询
  • Node.js 进阶之路:Sails.js 引领你探索未知
    Sails.js 是一款备受推崇的 Node.js MVC 框架,可简化 Web 开发并加快应用程序开发速度。作为 Node.js 进阶的理想选择,它提供了一系列强大功能和特性,使开发者能够创建健壮且可扩展的 Web 应用程序。 特性 ...
    99+
    2024-04-02
  • mysql之索引
      哪些情况需要创建索引 主键自动建立唯一索引 频繁作为查询条件的字段应该创建索引(where 后面的语句) 查询中与其它表关联的字段,外键关系建立索引 单键/组合...
    99+
    2016-10-12
    mysql之索引
  • 【MySQL进阶教程】 索引使用与设计原则
    前言 本文为 【MySQL进阶教程】 索引使用与设计原则 相关知识,下边将对索引的使用(包括:验证索引效率,最左前缀法则,范围查询,索引失效情况,SQL提示,覆盖索引,前缀索引,单列索引与联合索引)...
    99+
    2023-09-29
    mysql 数据库 java
  • SQL Server索引碎片维护进阶
    一、产生原因及影响 索引是数据库引擎中针对表(有时候也针对视图)建立的特别数据结构,用来帮助查找和整理数据,它的重要性体现在能够使数据库引擎快速返回查询结果。当对索引所在的基础数据表进行增删改时,若存储的数据进行了不适当的跨页(SQL S...
    99+
    2020-05-08
    SQL Server索引碎片维护进阶
  • 【MySQL进阶教程】InnoDB引擎
    前言 本文为 【MySQL进阶教程】InnoDB引擎 相关知识,下边将对InnoDB引擎介绍,InnoDB引擎架构,事务原理,MVCC等进行详尽介绍~ 📌博主主页:小新要变强 的主页...
    99+
    2023-09-13
    mysql 数据库 java
  • MySQL优化之索引
    SQL为什么需要优化? 对于初学者来说,能够写出实现功能的SQL语句而不出错,查询出所需要的结果,就已经能够满足日常使用了。但在某些场景,对性能的要求比较高,因此,要求SQL的执行响应速度快,就需要对SQL进行一定程度的优化。 在...
    99+
    2021-02-14
    MySQL优化之索引
  • Mysql之索引介绍
    定义:索引用于快速找出某个列中有一特定值的行。不使用索引,MySql必须从第一条记录开始读完整个表,直到找出相关的行。表越大,查询数据所花费的时间越多。如果表中查询的列有一个索引,Mysql能快速到达一个位...
    99+
    2024-04-02
  • Mysql之进阶查询语句
    目录 一,常用查询 1,order by按关键字排序 1.1 升序排序  1.2 降序排序  1.3 结合where进行条件过滤再排序  1.4多字段排序  2,and和or判断 2.1 and和or的使用  2.2 嵌套,多条件...
    99+
    2023-09-01
    mysql 数据库 sql
  • MySQL进阶篇(02):索引体系划分,B-Tree结构说明
    本文源码:GitHub·点这里 || GitEE·点这里 一、索引简介 1、基本概念 首先要明确索引是什么:索引是一种数据结构,数据结构是计算机存储、组织数据的方式,是指相互之间存在一种或多种特定关系的数据元素的集合,例如:链表...
    99+
    2018-11-14
    MySQL进阶篇(02):索引体系划分,B-Tree结构说明
  • MySQL进阶篇(03):合理的使用索引结构和查询
    一、高性能索引 1、查询性能问题 在MySQL使用的过程中,所谓的性能问题,在大部分的场景下都是指查询的性能,导致查询缓慢的根本原因是数据量的不断变大,解决查询性能的最常见手段是:针对查询的业务场景,设计合理的索引结构。 2、索引使用原则 ...
    99+
    2015-01-10
    MySQL进阶篇(03):合理的使用索引结构和查询
  • MySQL之聚簇索引与非聚簇索引
    MySQL之聚簇索引与非聚簇索引 聚簇索引非聚簇索引聚簇索引和非聚簇索引的区分MySQL索引实现InnoDB索引实现MyISAM索引实现 问答 索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,主要讨论Inn...
    99+
    2023-08-30
    mysql 数据库
  • Mysql进阶索引篇03——2个新特性,11+7条设计原则教你创建索引
    前 言 🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端🍌 专栏简介:mysql进阶,主要讲解mysql数据库进阶知识,包括索引、...
    99+
    2023-09-10
    mysql 数据库 搜索引擎
  • 【进阶篇】MySQL 存储引擎详解
    文章目录 0.前言1.基础介绍2.1. InnoDB存储引擎底层原理InnoDB记录存储结构和索引页结构InnoDB记录存储结构:InnoDB索引页结构: 3. MVCC 详解3.1. 版...
    99+
    2023-09-07
    mysql 数据库
  • MySQL count(*)之索引选择
    覆盖索引对于一些统计问题,如下: MySQL > show create table test1 \G *****************...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作