黑马程序员索引学习笔记
文章目录
- 索引的分类
- 从索引字段特性
- 从物理存储
- 从数据结构
- 组成索引的字段个数
- InnoDB主键索的B+tree高度为多高呢?
- explain执行计划
- 最左匹配原则
- 索引失效情况
- SQL提示
- 覆盖索引、回表查询
- 前缀索引
- 索引设计原则
索引的分类
从索引字段特性
主键索引、唯一索引、常规索引、全文索引

从物理存储
聚簇(集)索引、二级索引

从数据结构
B+树索引、Hash索引、全文索引
| InnoDB | MyISAM | Memory | |
|---|---|---|---|
| B+ tree索引 | Yes | Yes | Yes |
| Hash索引 | No | No | Yes |
| Full-text索引 | Yes | Yes | No |
组成索引的字段个数
单列索引、联合索引
InnoDB主键索的B+tree高度为多高呢?

图片中n表示主键个数,n+1表示指针数量。
explain执行计划

最左匹配原则
- 如果索引了多列(联合索引),要遵守最左前缀法则。
- 最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。
- 如果跳跃某一列,索引将部分失效(后面的字段索引失效)。
- 范围查询(不含等于)后面的字段不走索引。
注:查询字段存在即可和sql顺序无关
索引失效情况
- 在索引字段上进行运算
explain select * from tb_user where substring(phone, 10, 2) = '15';
- 字符串类型字段使用时,不加引号
-- 此处phone的值没有加引号
desc select * from tb_user where phone = 17799990015;
- 头部模糊查询(即%在前面)匹配
-- 此处%在前面
explain select * from tb_user where profession like '%工程';
- 用or分割开的条件,其中某一列没有索引,那么涉及的索引都不会被用到。
-- 必须id和name都有索引,才可以用到索引
desc select * from t_achievement_application where id = 66 or name = '张三';
- 如果MySQL评估使用索引比全表更慢,则不使用索引。(参考范围查询、is null、is not null)
is null、is not null是否走索引取决于表中的数据分布。
SQL提示

其中 use是建议MySQL用这个索引
覆盖索引、回表查询
尽量使用覆盖索引(查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到),减少select *。
Extra列描述
NULL: 需要回表查询
using index condition : 查找使用了索引,但是需要回表查询数据
using where; using index : 查找使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据

username、password建立联合索引,避免回表查询。
前缀索引

索引设计原则

相关文章:
黑马程序员索引学习笔记
文章目录 索引的分类从索引字段特性从物理存储从数据结构组成索引的字段个数 InnoDB主键索的Btree高度为多高呢?explain执行计划最左匹配原则索引失效情况SQL提示覆盖索引、回表查询前缀索引索引设计原则 索引的分类 从索引字段特性 主键索引、唯一索引、常规索引、全文索引…...
新手如何对一个web网页进行一次渗透测试
新手如何对一个web网页进行一次渗透测试 文章目录 新手如何对一个web网页进行一次渗透测试什么是渗透测试?渗透测试和红蓝对抗的区别那么拿到一个网站后如何进行一次优雅的渗透测试呢 什么是渗透测试? 在获得web服务运营的公司书面授权的情况下,模拟攻击者的行为…...
vs2019 - MFC对话框程序的工程名称不支持下划线命名法
文章目录 vs2019 - MFC对话框程序的工程名称不支持下划线命名法概述笔记备注END vs2019 - MFC对话框程序的工程名称不支持下划线命名法 概述 正在写账单分析程序, 用MFC 对话框. 因为比较习惯下划线命名法, 就在向导中给工程名称起了一个my_test这样的名称(下划线命名法, 小…...
java JDBCUtils 使用静态代码块连接数据库 全程值保持一次连接
\src\com\data\entity\JDBCUtils.java 使用静态代码块连接数据库 全程值保持一次连接 package com.data.entity;import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource;import javax.sql.DataSource;pub…...
剑指 Offer(第2版)题解(C++ Version)
剑指 Offer(第2版)题解(C Version) 剑指 Offer(第2版)题解(C Version)面试题 3:数组中重复的数字面试题 4:二维数组中的查找面试题 5:替换空格面试…...
6.15合并二叉树(LC617-E)
算法: 前序、中序、后序都可以,这道题正常逻辑一般都是用前序 正确代码: 这里就是在root1这颗树上改的,也可以新建一个树。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode …...
百度智能小程序系统源码+关键词排名优化 附带完整的搭建教程
百度智能小程序系统的开发背景是基于百度强大的技术实力和对用户需求的深入理解。在移动互联网时代,用户对便捷、高效、智能的服务需求越来越高。而小程序作为一种轻量级的应用程序,恰好能够满足用户的这些需求。然而,开发一个小程序需要掌握…...
2019年11月7日 Go生态洞察:Go Modules v2及更高版本
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
vue3通过provide和inject实现多层级组件通信
父组件 <template><div><h1>我是父组件 {{num}}</h1><hr><child></child></div> </template><script setup> import child from ./child.vue; import { ref,provide } from vue; let num ref(520) provide(pare…...
【Java学习笔记】72 - 满汉楼 - 餐饮管理系统
项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter26 一、需求说明 满汉楼项目功能多,界面复杂,涉及到复杂的awt和swing技术和事件编程,做如下调整: 1.去掉界面和事件处理(工作中使用很少),使…...
【我的创作纪念日】
机缘 大家好,我是圥忈ゼ, 2023 年 07 月 20 日,我撰写了第 1 篇技术博客:《我的编程未来规划》,也是由于我高考后的专业选择,和就业方向的选择,加上想立志成为一名专业 IT 作者,我结…...
车载通信架构 —— 传统车内通信网络MOST总线(光纤传输、专精多媒体)
车载通信架构 —— 传统车内通信网络MOST总线(光纤传输、专精多媒体) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都…...
使用Pytorch从零开始构建Energy-based Model
知识回顾: [1] 生成式建模概述 [2] Transformer I,Transformer II [3] 变分自编码器 [4] 生成对抗网络,高级生成对抗网络 I,高级生成对抗网络 II [5] 自回归模型 [6] 归一化流模型 [7] 基于能量的模型 [8] 扩散模型 I, 扩散模型 II 在本教程中…...
基于C#实现梳排序
为什么取名为梳,可能每个梳都有自己的 gap 吧,大梳子 gap 大一点,小梳子 gap 小一点。上一篇我们看到鸡尾酒排序是在冒泡排序上做了一些优化,将单向的比较变成了双向,同样这里的梳排序也是在冒泡排序上做了一些优化。 …...
盘点72个Android系统源码安卓爱好者不容错过
盘点72个Android系统源码安卓爱好者不容错过 学习知识费力气,收集整理更不易。 知识付费甚欢喜,为咱码农谋福利。 链接:https://pan.baidu.com/s/1qiWeLjF2i4dlgmTYgPPSvw?pwd8888 提取码:8888 项目名称 A keyboardlisten…...
nodejs+vue+elementui足球篮球联赛系统
系统主要是以后台管理员管理为主。管理员需要先登录系统然后才可以使用本系统,管理员可以对个人中心、用户管理、赛事信息管理、球队信息管理、球员信息管理、比赛分值板管理、系统管理等进行添加、查询、修改、删除,以保障足球联赛管理系统的正常运行。…...
18.Oracle的过程和函数
oracle11g的过程和函数 一、过程(Procedure)1、子程序2、过程的相关语法 二、函数(Function)1、函数的概念2、函数的创建3、 案例 在Oracle数据库中,过程和函数都是用来封装一系列SQL语句和逻辑操作的数据库对象&#…...
A JSONObject text must begin with ‘{‘ at 1 [character 2 line 1]
今天调用一个接口,返回的是json数据,但是拿到数据进行转换的报错, JSONObject resultJson new JSONObject(resuStr);报错信息是: Exception in thread "main" org.json.JSONException: A JSONObject text must begin …...
C#中openFileDialog控件的使用方法
目录 一、OpenFileDialog基本属性 二、使用 OpenFile 从筛选的选择中打开文件 1.示例源码 2.生成效果 3. 其它示例 三、使用 StreamReader 以流的形式读取文件 1.示例源码 2.生成效果 四、一种新颖的Windows窗体应用文件设计方法 在C#中,OpenFileDialog控件…...
多线程04 死锁,线程可见性
前言 前面我们讲到了简单的线程安全问题以及简单的解决策略 其根本原因是cpu底层对线程的抢占式调度策略,随机调度 其他还有一些场景的问题如下 1.多个线程同时修改一个变量问题 2.执行的操作指令本身不是原子的 比如自增操作就分为三步,加载,自增,保存 3.内存可见性问题 4.指令…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
