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

目录

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.mzph.cn/news/805039.shtml

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

相关文章

[【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器

【JSON2WEB】01 WEB管理信息系统架构设计 【JSON2WEB】02 JSON2WEB初步UI设计 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代码前端框架介绍 【JSON2WEB】05 前端开发三件套 HTML CSS JavaScript 速成 【JSON2WEB】06 JSON2WEB前端框架搭建 【J…

微信小程序picker设置了系统年度,打开选择年份从1年开始显示

背景:开发微信小程序时,使用了picker组件,设置值为当前系统时间年份,可以正常回显年份。但是打开面板选择年份的时候,默认从一年开始显示的。如下图所示。 原因:因为绑定的年份字段为Number类型。 解决方案…

文心一言 vs. GPT-4: 全面比较

1. 训练数据和预训练 文心一言 训练数据:文心一言是由中国研究人员开发的中文语言模型。它主要在大量古典中文文学作品上进行训练,包括诗歌、散文和历史文本。这些文学作品涵盖了丰富的中文语言和文化,使得文心一言在传统文化方面具有独特优…

React中State管理的4 个关键解决方案

在 React 应用开发中,状态(state)管理是非常重要的一部分。合理地管理状态可以确保组件的行为正确,提高应用的可维护性和性能。然而,在实际使用 React 的 state 时,开发者常常会遇到一些常见的问题和陷阱。 本文将从解决问题的角度,总结 React 中 state 管理的4个关键技巧: 使…

面向对象知识汇总(5)

目录 Day 5问题二十二:抽象类1. 抽象类概念2. 抽象类语法3. 抽象类特性4. 抽象类和普通类的区别 问题二十三:接口1. 接口的概念2. 接口的语法规则3. 接口的使用4. 接口的特性5. 实现多个接口6. 接口间的继承 Day 5 问题二十二:抽象类 1. 抽…

考研总计划篇

政治 九月份开始听徐涛老师的课,只需要听哲学,政治,经济学即可,然后用仓盾小程序刷题,刷题就吃饭的时候刷就是了。 工具书—苏一的提分手册,每天抽一个小时刷刷上面的知识点。 英语(现在到九…

12(13)(14)-2(1)-CSS 字体图标+实战:商城首页

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 CSS 字体图标1 字体图标的产生2 字体图标的优点3 字体图标的下载4 字体图标的…

WordPress LayerSlider插件SQL注入漏洞复现(CVE-2024-2879)

0x01 产品简介 WordPress插件LayerSlider是一款可视化网页内容编辑器、图形设计软件和数字视觉效果应用程序,全球活跃安装量超过 1,000,000 次。 0x02 漏洞概述 WordPress LayerSlider插件版本7.9.11 – 7.10.0中,由于对用户提供的参数转义不充分以及缺少wpdb::prepare(),…

【第二十三篇】Burpsuite+SQL注入实现登录绕过等(靶场实战案例)

目录 Where+SQL注入获取隐藏数据SQL注入实现登录绕过Union+SQL注入获取数据库类型和版本Where+SQL注入获取隐藏数据 存在一个业务场景如下 筛选商品时,后端查询语句如下: SELECT * FROM products WHERE category = Gifts AND released = 1只有商品名匹配且该商品已发布(r…

ubuntu系统开机无限循环输入密码后黑屏【以及问题2:ls后桌面有文件但是桌面看不到】的解决方法

问题1:刚进来黑屏,无限循环输入密码后黑屏亮屏,然后又输入密码黑屏亮屏…… 解决方法:卸载重装桌面系统ubuntu-desktop那个。然后用的是在命令行startx可以进入一个新的与图形化界面, 然后进来界面后, 又遇…

使用vue3搭建一个CRM(客户关系管理)系统

目录 1. 需求分析 2. 设计 3. 技术选型 4. 开发环境搭建 5. 前端开发 6. 后端开发 7. 数据库搭建 8. 测试 9. 部署 10. 维护和迭代 总结 搭建一个CRM(客户关系管理)系统是一个复杂的项目,涉及到需求分析、设计、开发、测试和部署等…

idea中MySQL数据库的配置

在IntelliJ IDEA中配置数据库可以通过以下步骤进行: 打开IntelliJ IDEA,在菜单栏中选择"View" -> "Tool Windows" -> "Database",打开Database工具窗口。 在Database工具窗口上方,点击"…

程序猿之路:从兴趣到职业的蜕变

水篇(程序猿之路) 如果硬要说自己为什么做程序员的话,我有故事,你有酒(留言)吗? 目录 记录工作实践与项目复盘 技术笔记巩固知识要点 职场感悟心得 曾经的我,对计算机世界充满好奇…

2024全国现代流通经济创新大会暨城郊大仓基地高质量建设论坛日程发布

2024年4月19日 中国平谷 建设城郊大仓基地 创新现代流通经济 一、大会开幕式&主论坛 时间:9:00-12:00 地点:博物馆一楼 报告厅 主持人:中国商业联合会商贸物流与供应链分会会长干为 08:30-09:00 大会入场&宣传片视频 09:00-0…

LeetCode 热题 100 | 多维动态规划(二)

目录 1 5. 最长回文子串 2 1143. 最长公共子序列 菜鸟做题,语言是 C 1 5. 最长回文子串 核心思想:把总问题拆解为若干子问题。 总问题:从第 i 个字母到第 j 个字母是回文串子问题:从第 i 1 个字母到第 j - 1 个字母是回文…

SSH和telnet的了解

90%的中大型企业都会选用SSH?8分钟让你明白它赢在哪里!附实验操作_哔哩哔哩_bilibili 远程登录的安全协议SSH(会进行加密) (公有密钥,私有密钥) 公有密钥大家都可以获得。 (为了…

【Python基础】集合

文章目录 [toc]什么是集合集合的特点元素不重复性示例 无序性示例 集合操作增加元素add()方法 删除元素clear()方法pop()方法remove()方法 交集intersection()方法&符号isdisjoint()方法 并集union()方法|符号 差集difference()方法-符号 对称差集symmetric_difference()方…

配置交换机端口安全

1、实验目的 通过本实验可以掌握: 交换机管理地址配置及接口配置。查看交换机的MAC地址表。配置静态端口安全、动态端口安全和粘滞端口安全的方法。 2、实验拓扑 配置交换机端口安全的实验拓扑如图所示。 配置交换机端口安全的实验拓扑 3、实验步骤 &#xff…

ZStack Cloud 5.0.0正式发布——Vhost主存储、隔离PVLAN网络、云平台报警优化、灰度升级增强四大亮点简析

近日,ZStack Cloud 5.0.0正式发布,推出了包含Vhost主存储、隔离PVLAN网络、云平台报警优化、灰度升级增强在内的一系列重要功能。云主机管理、物理机运维、密评合规、灾备服务等诸多使用场景和功能模块均有更新,为您带来更完善的平台服务、更…

设计模式——2_8 策略(Strategy)

文章目录 定义图纸一个例子:如何切换坦克的攻击方式GameElement(游戏元素)TankFactory(坦克工厂)Tank(坦克) 医疗车和飞行车策略模式Behavior(行为)TankTankFactory 碎碎念策略和状态为什么我们…