iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >一文了解MySQL二级索引的查询过程
  • 565
分享到

一文了解MySQL二级索引的查询过程

2024-04-02 19:04:59 565人浏览 安东尼
摘要

目录前言联合索引总结前言 聚簇索引就是innodb默认创建的基于主键的索引结构,而且表里的数据就是直接放在聚簇索引里,作为叶节点的数据页: 基于主键的数据搜索:从聚簇索引的根节点开

前言

聚簇索引就是innodb默认创建的基于主键的索引结构,而且表里的数据就是直接放在聚簇索引里,作为叶节点的数据页:

基于主键的数据搜索:从聚簇索引的根节点开始进行二分查找,一路找到对应数据页,基于页目录就直接定位到主键目标数据。

若想对其它字段建立索引,甚至是基于多个字段建立联合索引,此时索引结构又是咋样?

假设对其他字段建立索引,如name、age之类,都是一样原理。比如你插入数据时:

  • 把完整数据插入聚簇索引的叶节点的数据页,同时维护好聚簇索引
  • 为你其他字段建立的索引,重新再建立一颗B+树

比如你基于name字段建立了一个索引,当插入数据时,就会重新搞一颗B+树,B+树的叶节点也是数据页,但该数据页里仅放主键字段和name字段:

这是独立于聚簇索引之外的另一个name字段的B+索引树,其叶节点的数据页仅存放主键和name字段值。

整体排序规则都跟聚簇索引按照主键的排序规则是一样,即:

  • 叶节点的数据页中的name值都是排序的
  • 下一个数据页里的name字段值都>上一个数据页里的name字段值

name字段的索引B+树也会构建多层级的索引页,索引页里存放:

  • 下一层的页号
  • 最小name字段值,根据name字段值排序。

所以若你根据name字段查数据,过程也一样,从name索引树的根节点开始,一层一层往下找,一直找到叶节点的数据页,定位到name字段值对应的主键值。

然后针对

select * from t where name='xx'

这种语句,先根据name值在name索引树里找,找到叶节点,也仅能找到对应主键值,而找不到这行数据的所有字段。

所以还需回表:还需根据主键值,再到聚簇索引里从根节点开始,找到叶节点的数据页,定位到主键值对应的完整数据行,此时才能把select *要的全部字段值都取出。

联合索引

比如name+age,运行流程同理,建立一个独立的B+树,叶节点的数据页存放id+name+age后,默认按name排序,name一样就按age排,不同数据页之间的name+age值的排序也如此。

然后这个name+age的联合索引的B+树的索引页存放:

  • 下一层节点的页号
  • 最小的name+age的值

所以当你根据name+age搜索时,就会走name+age联合索引树,搜索到主键,再根据主键到聚簇索引里去搜索。

总结

以上就是InnoDB索引的实现原理,就是建立B+树,层层二分查找。不同的索引就是建立了不同B+树,然后增删改时:

在数据页里更新数据维护你所有的索引

到此这篇关于Mysql二级索引查询过程的文章就介绍到这了,更多相关mysql二级索引查询过程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: 一文了解MySQL二级索引的查询过程

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 一文了解MySQL二级索引的查询过程
    目录前言联合索引总结前言 聚簇索引就是innodb默认创建的基于主键的索引结构,而且表里的数据就是直接放在聚簇索引里,作为叶节点的数据页: 基于主键的数据搜索:从聚簇索引的根节点开...
    99+
    2024-04-02
  • MySQL二级索引查询过程是怎么样的
    这篇文章将为大家详细讲解有关MySQL二级索引查询过程是怎么样的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言聚簇索引就是innodb默认创建的基于主键的索引结构,而且表里的数据就是直接放在聚簇索引里...
    99+
    2023-06-29
  • MySQL查询冗余索引和未使用过的索引操作
    MySQL5.7及以上版本提供直接查询冗余索引、重复索引和未使用过索引的视图,直接查询即可。 查询冗余索引、重复索引 select * sys.from schema_...
    99+
    2024-04-02
  • 【⑦MySQL】· 一文了解四大子查询
    前言 ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL标量/单行子查询、列子/表子查询的讲解✨ 目录 前言一、子查询概念二、标量/单行子查询、列子/表子查询三、总结 一、子查询概念 子查询指一个查询...
    99+
    2023-08-18
    mysql 数据库 sql
  • 一文简单了解MySQL前缀索引
    当要索引的列字符很多时 索引则会很大且变慢 ( 可以只索引列开始的部分字符串 节约索引空间 从而提高索引效率 ) 原则: 降低重复的索引值 例如现在有一个地区表 areagdpcod...
    99+
    2024-04-02
  • 【MySQL】一文带你了解MySQL中的子查询
    文章目录 1. 需求分析与问题解决1. 1实际问题1.2 子查询的基本使用1.3 子查询的分类 2. 单行子查询2.1 单行比较操作符2.2 代码示例2.3 HAVING 中的子查询2.4 注意的问题 3. 多行子查...
    99+
    2023-08-18
    mysql 数据库
  • MySQL InnoDB 二级索引的排序示例详解
    排序问题 最近看了极客时间上 《MySQL实战45讲》,纠正了一直以来对 InnoDB 二级索引的一个理解不到位,正好把相关内容总结下。 PS:本文的所有测试基于 MySQL 8.0.13 。 先把问题抛...
    99+
    2024-04-02
  • 如何通过索引优化PHP与MySQL的全文检索和排序查询?
    在开发互联网应用程序中,全文检索和排序查询是常见的需求。对于大量数据的查询操作来说,优化索引是提高数据库性能的重要手段之一。在PHP与MySQL的组合中,我们可以通过合理使用索引,来提高全文检索和排序查询的效率。本文将介绍如何通过索引优化P...
    99+
    2023-10-21
    MySQL PHP 索引优化
  • 如何通过索引优化PHP与MySQL的联合查询和子查询?
    在开发中,经常会遇到需要在PHP中执行联合查询和子查询的情况,而这些查询的性能往往非常关键。在处理大规模数据时,不优化的查询可能会导致严重的性能问题。因此,通过合适的索引优化MySQL查询是非常必要的。下面我们将详细介绍如何通过索引优化PH...
    99+
    2023-10-21
    MySQL PHP 索引优化
  • 如何通过索引提升PHP与MySQL的联合索引和覆盖索引查询效率?
    随着互联网的发展和数据量的增加,数据库的性能优化变得越来越重要。索引是提升数据库查询性能的一种重要手段。在PHP与MySQL的应用中,通过合理使用联合索引和覆盖索引,可以大幅度提升查询效率。本文将介绍如何使用联合索引和覆盖索引进行查询优化,...
    99+
    2023-10-21
    MySQL PHP 索引 关键词:
  • 如何通过索引优化PHP与MySQL的多表查询?
    在开发Web应用程序时,经常会涉及到与数据库进行交互的操作,尤其是对于关系型数据库来说,多表查询是非常常见的操作。然而,当数据量过大,查询复杂度增加时,多表查询的性能可能会受到一定的影响。为了提高查询效率,我们可以通过优化索引来进行调整。索...
    99+
    2023-10-21
    MySQL PHP 索引优化 多表查询
  • 一篇文章弄懂MySQL查询语句的执行过程
    前言 需要从数据库检索某些符合要求的数据,我们很容易写出 Select A B C FROM T WHERE ID = XX  这样的SQL,那么当我们向...
    99+
    2024-04-02
  • 如何通过索引提升PHP与MySQL的大数据查询和全文检索的效率?
    在面对大数据量的查询和全文检索时,PHP和MySQL是广泛使用的组合。然而,随着数据量的增加,查询和检索的效率可能会下降。为了提高效率,我们可以利用索引来加快查询和检索的速度。本文将介绍如何通过索引来优化PHP与MySQL的大数据查询和全文...
    99+
    2023-10-21
    MySQL PHP 索引
  • MySQL的索引原理以及查询优化详解
    目录一、介绍1.什么是索引?2.为什么要有索引呢?二、索引的原理一 索引原理二 磁盘IO与预读三、索引的数据结构四、Mysql索引管理一、功能二、MySQL的索引分类三、 索引的两大...
    99+
    2024-04-02
  • MySQL全文索引like模糊匹配查询慢解决方法
    目录需求全文索引介绍全文索引使用中文分词与全文索引什么是N-gram?这个上面这个N是怎么去配置的?修改方式实际使用初始化测试数据添加索引查询1、使用自然语言模式 NATURAL LANGUAGE MODE 查询2、使用...
    99+
    2024-04-02
  • 生产环境MySQL索引时效的排查过程
     早上收到开发同学求助,有个SQL查询耗时特别长,看了执行计划发现没有走索引,但是不知道原因在哪里,我们一起来分析一下。 mysql>explain SELEC...
    99+
    2024-04-02
  • 如何通过索引优化PHP与MySQL的地理位置查询和范围查询?
    摘要:地理位置查询和范围查询是许多应用程序中常见的查询操作。本文将介绍如何使用索引优化PHP与MySQL的地理位置查询和范围查询,通过减少查询时间提高应用程序的性能。同时,还将提供具体的代码示例以供参考。引言:在许多应用程序中,地理位置查询...
    99+
    2023-10-21
    MySQL 优化 PHP 索引 地理位置
  • 如何通过索引优化PHP与MySQL的跨表查询和跨数据库查询?
    引言:在面对需要处理大量数据的应用程序开发中,跨表查询和跨数据库查询是不可避免的需求。然而,这些操作对于数据库的性能来说是非常消耗资源的,会导致应用程序变慢甚至崩溃。本文将介绍如何通过索引优化PHP与MySQL的跨表查询和跨数据库查询,从而...
    99+
    2023-10-21
    MySQL PHP 索引优化
  • 如何通过索引优化PHP与MySQL的复杂查询和大数据量查询?
    引言:随着互联网的快速发展,数据量的爆炸式增长成为了一个普遍的问题。对于使用PHP和MySQL进行复杂查询和处理大数据量的项目来说,索引优化是提高查询性能和响应时间的重要手段之一。本文将介绍几种常见的索引优化技巧,以及详细的代码示例。一、了...
    99+
    2023-10-21
    MySQL PHP 索引优化
  • 你了解Go语言中二维码生成和索引查询的最佳实践吗?
    Go语言是一种极其流行的编程语言,由于其高效、快速、简单等特点,越来越多的开发者选择使用Go语言来开发项目。在Go语言中,二维码生成和索引查询是非常重要的功能,本文将介绍二维码生成和索引查询的最佳实践。 一、二维码生成的最佳实践 二维码是一...
    99+
    2023-07-03
    二维码 索引 面试
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作