MySQL高级(索引分类-聚集索引-二级索引)

news/2024/5/18 18:24:09/文章来源:https://blog.csdn.net/m0_65152767/article/details/137523800

目录

1、主键索引、唯一索引、常规索引、全文索引

2、 聚集索引、二级索引

3、回表查询

4、通过id查询和通过name查询那个执行效率高?

5、 InnoDB主键索引的 B + tree 高度为多高呢?


1、主键索引、唯一索引、常规索引、全文索引

  • 在MySQL数据库,将索引的具体类型主要分为以下几类:主键索引、唯一索引、常规索引、全文索引。
分类含义特点关键字
主键索引针对于表中主键创建的索引默认自动创建,只能有一个primary
唯一索引避免同一个表中某数据列中的值重复可以有多个unique
常规索引快速定位特定数据可以有多个
全文索引全文索引查找的是文本中的关键词,而不是比较索引中的值可以有多个fulltext

2、 聚集索引、二级索引

  • 在  InnoDB 存储引擎中,根据索引的存储形式,又可以分为以下两种:
分类含义特点
聚集索引(Clustered Index)将数据存储与索引放到了一块,索引结构的叶子节点保存了 行数据必须有,而且只有一个
二级索引(Secondary Index)将数据与索引分开存储,索引结构的叶子节点关联的是 对应的主键可以存在多个

聚集索引选取规则:

  • 如果存在主键,主键索引就是聚集索引。
  • 如果不存在主键,将使用第一个唯一(unique)索引作为聚集索引。
  • 如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引。

  •  聚集索引的叶子节点下挂的是这一行的数据。
  • 二级索引的叶子节点下挂的是该字段值对应的主键值。

 接下来,我们来分析一下,当我们执行如下的SQL语句时,具体的查找过程是什么样子的。

 具体过程如下:

  1. 由于是根据 name 字段进行查询,所以先根据 name = ‘Arm’ 到  name 字段的二级索引中进行匹配查找。但是在二级索引中只能查找到 Arm 对应的主键值 10.
  2. 由于查询返回的数据是 * ,所以此时,还需要根据主键值 10,到聚集索引中查找 10 对应的记录,最终找到 10 对应的行 row 。
  3. 最终拿到这一行的数据,直接返回即可。

 3、回表查询

  • 这种先到二级索引中查找数据,找到主键值,然后再到聚集索引中根据主键值,获取数据的方式,就称之为回表查询。

 4、通过id查询和通过name查询那个执行效率高?

  以下SQL语句,那个执行效率高?为什么?

select * from user where id = 10;
select * from user where name = 'Arm';

  备注:id 为主键,name字段创建的有索引;

解答:通过 id 查询 的执行性能要高于 通过 name字段查询。因为 通过 id 查询语句直接走聚集索引,直接返回数据。而 通过 name 字段语句需要先查询 name 字段的二级索引,然后再查询聚集索引,也就是需要进行回表查询。

5、 InnoDB主键索引的 B + tree 高度为多高呢?

     如果树的高度为 3 就类似于 下面这张图的结构

假设:

        一行 数据大小为 1 k一页 中可以存储 16 行 这样的数据。InnoDB的指针占用 6 个字节的空间,主键即使为 bigint,占用字节数为 8 。

        

         8 bit = 1 Byte

        1024 Byte = 1KB

        1024 KB = 1MB

        1024 MB =1GB

        1024 GB = 1TB

高度为 2
n 是 键值数量n + 1 是 指针数量

n * 8 +(n+1)* 6 = 16 * 1024 ,

算出 n 约为 1170,n + 1 = 1171。

1171 * 16  =  18736

也就是说,如果树的高度为 2 ,则可以存储 18000 多条记录。1万8 多条。

        

高度为 3
n 是 键值数量n + 1 是 指针数量

1171 *  1171  *  16 = 21939856

也就是说,如果树的高度为 3,则可以存储 2200 w 左右的记录。

       

       

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1045544.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++的stack和queue类(一):适配器模式、双端队列与优先级队列

目录 基本概念 stack的使用 queue的使用 适配器模式 stack.h test.cpp 双端队列-deque 仿函数 优先队列 priority_queue的使用 queue.h文件 stack.h文件 test.cpp文件 日期类的比较 商品的比较 结论 基本概念 1、stack和queue不是容器而是容器适配器&…

性能优化原则

相关链接:【运行环境】加载资源的形式 性能优化 1 性能优化原则 多使用内存、缓存或其他方法 减少CPU计算量,减少网络加载耗时 (适用于所有编程的性能优化----空间换时间) 2 从何入手 性能优化-让加载更快 减少资源体积&#x…

每日一题 — 最大连续 1 的个数III

解法一:暴力枚举 先定义left和right双指针,left先固定在起始位置,遍历right当值等于1的时候,直接跳过,等于0的时候,zero计数器加一当zero等于k的时候,就开始记录此时最大长度是多少然后left加一…

深度剖析:网络安全中的红蓝对抗策略

红蓝对抗 红蓝对抗服务方案 在蓝队服务中,作为攻击方将开展对目标资产的模拟入侵,寻找攻击路径,发现安全漏洞和隐患。除获取目标系统的关键信息(包括但不限于资产信息、重要业务数据、代码或管理员账号等)外&#x…

Python | 超前滞后分析

Nino SST Indices (Nino 12, 3, 3.4, 4; ONI and TNI) 有几个指标用于监测热带太平洋,所有这些指标都是基于海表温度(SST)异常在一个给定的区域的平均值。通常,异常是相对于30年的周期来计算的。厄尔尼诺3.4指数(Nio 3.4 index)和海洋厄尔尼诺指数(Ocea…

Chrome谷歌下载入口

​hello,我是小索奇 发现好多人说谷歌浏览器在哪里下载呀,哪里可以找到? 你可能会心想,一个浏览器你还不会下载啊? 还真是,有很多伙伴找不到下载入口,为什么呢? Bing进行搜索&am…

java程序 .exe启动nginx防止重复启动,已解决

java代码生成好的.exe启动nginx服务程序 根据nginx占用端口来解决nginx服务重复启动问题(下面代码了解代码逻辑后根据自己的业务需求修改即可) 代码: package org.example;import javax.swing.*; import java.awt.*; import java.io.*; …

C#/WPF 使用开源Wav2Lip做自己的数字人(无需安装环境)

实现效果 Speaker Wav2Lip概述 2020年,来自印度海德拉巴大学和英国巴斯大学的团队,在ACM MM2020发表了的一篇论文《A Lip Sync Expert Is All You Need for Speech to Lip Generation In The Wild 》,在文章中,他们提出一个叫做Wa…

ChatGPT 4.0报错 :“Hmm…something seems to have gone wrong.”

ChatGPT报错,GPT-3.5模型正常,GPT-4.0报错:“Hmm…something seems to have gone wrong.” 说明:嗯…好像出了什么问题。 原因: 部分用户在使用GPT-3.5模型时提问正常,GPT-4.0模型提问时,出现这…

Open CASCADE学习|求曲面的参数空间

在三维空间中,任意的曲面都可以通过特定的方法映射到一个二维参数平面上,从而对其进行详细的几何分析和处理。首先,我们需要从三维模型中提取出特定的曲面,这通常被称为“Face”。一个face可以被视为三维空间中的一个封闭区域&…

xss.pwnfunction-Ah That‘s Hawt

<svg/onloadalert%26%2340%3B1%26%2341%3B> <svg/>是一个自闭合形式 &#xff0c;当页面或元素加载完成时&#xff0c;onload 事件会被触发&#xff0c;从而可以执行相应的 JavaScript 函数

【日期】获取当天以及未来三天的日期和周几

// 获取当天以及未来三天的日期和周几getDates() {const today new Date();const dayOfWeek ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];const todayDate today.toDa…

专业测评:哪个平台提供大数据信用风险检测?

在贷款申请过程中&#xff0c;大数据信用评估变得越来越重要。许多人对此感到困惑&#xff0c;不清楚如何获取自己的大数据信用风险等级。本文将为您解答疑惑&#xff0c;介绍如何正确地查询和理解大数据信用报告。 市场上的大数据信用报告查询服务乱象 目前&#xff0c;市场上…

网工内推 | 安全运维、服务工程师,软考中级、CISP优先,六险一金

01 华成峰科技 招聘岗位&#xff1a;安全运维工程师 职责描述&#xff1a; 1、负责安全产品的运维管理&#xff0c;包括设备升级变更、策略配置优化、设备巡检等&#xff1b; 2、负责7*24小时安全监控与应急响应&#xff0c;包括态势感知日志监测、安全事件分析及处置等&#…

VMware vSphere虚拟化基础管理平台

VMware简介 VMware介绍 官网&#xff1a;https://www.vmware.com/cn.html VMware公司成立于1998年&#xff0c;2003年存储厂商EMC以6.35亿美元收购了VMware&#xff1b;2015年10月&#xff0c;戴尔宣布以670亿美元收购EMC。VMware公司在2018年全年收入79.2亿美元。 VMware主…

C++修炼之路之string模拟实现

目录 前言 一&#xff1a;构造函数析构函数拷贝构造函数 二&#xff1a;c_str size capacity operator operator[] 三&#xff1a;普通迭代器 const迭代器范围for 四&#xff1a;关系操作符重载 五&#xff1a;reserveresize 六&#xff1a;push_back …

【C++第三阶段】deque容器评委打分案例

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 构造函数赋值操作大小操作插入删除数据存取排序评委评分案例描述 deque容器 双端数组&#xff0c;可以对头端插入删除操作。 如下图所示。 头部有插入删除操作&#xff0c;尾部亦然…

three.js尝试渲染gbl模型成功!(三)

参照教程&#xff1a;https://cloud.tencent.com/developer/article/2276766?areaSource102001.5&traceId88k805RaN_gYngNdKvALJ &#xff08;作者&#xff1a;九仞山&#xff09; 通过最近两天查three.js入门教程了解到 这玩应支持包括 .obj、.gltf等类型的模型结构。 g…

【微服务】------服务注册

在 微服务的基建工作 中提到过&#xff0c;在云原生、微服务时代&#xff0c;如果还是手动修改服务地址&#xff0c;是几乎不可完成的工作&#xff0c;需要一种机制完成自动上报和获取服务地址的支撑组件&#xff0c;可以保障服务的快速上线和下线&#xff0c;这就是服务注册/发…

vue vue3 手写 动态加载组件

效果展示 一、需求背景&#xff1a; # vue3 项目涉及很多图表加载、表格加载 #考虑手写一个动态加载组件 二、实现思路 通过一个加载状态变量&#xff0c;通过v-if判断&#xff0c;加载状态的变量等于哪一个&#xff0c;动态加载组件内部就显示的哪一块组件。 三、实现效果…