MySQL索引原理笔记

news2025/7/8 6:53:32

注意:本博客为个人学习记录,不保证正确性,仅供参考指正

MySQL索引原理以及SQL优化

文章目录

  • MySQL索引原理以及SQL优化
    • 索引与约束
    • 覆盖索引
    • 最左匹配规则
    • 索引下推(面试重点)
    • 索引存储
    • 索引失效
    • 如何解决sql比较慢的问题

索引与约束

  • 索引是什么:

    • 一种有序的存储结构

    • 按照单个或者多个列的值进行排序

  • 索引的目的

    • 提升搜索效率
  • 索引分类

    • 数据结构:

      • B+树索引;
      • 自适应hash索引;
      • 全文索引(elasticsearch)
    • 物理存储:

      • 聚集(聚簇)索引,一种B+树的类型
      • 辅助索引(二级索引),会导致回表查询
    • 列属性划分

      • 主键索引:非空唯一索引

      • 唯一索引:允许出现一个null

      • 普通索引

      • 前缀索引:在长字符串中只比较前几个字符

    • 列的个数划分

      • 单列索引
      • 组合索引
  • 索引代价

    • 占用空间
    • 维护的代价,增删改(DML)操作变慢
  • innodb 中表是索引组织表每张表有且仅有一个主键

    1. 如果显示设置 PRIMARY KEY ,则该设置的 key 为该表的主
      键;
    2. 如果没有显示设置,则从非空唯一索引中选择;
      1. 只有一个非空唯一索引,则选择该索引为主键;
      2. 有多个非空唯一索引,则选择声明的第一个为主键;
    3. 没有非空唯一索引,则自动生成一个 6 字节的_rowid作为
      主键;

为什么一定要确定一个主键索引呢?

因为在innodb中数据是存在于聚集索引B+树。

  • B+树以及Innodb B+树特征是什么?

    • 多路平衡搜索树:搜索指有序,中序遍历,比较key进行排序

    • Innodb B+树特征是:

      • 多路平衡搜索树,是矮胖的结构,层数低,磁盘IO少
      • 所有叶子节点都在同一层
      • 叶子节点间构成一个双向链表
      • 节点大小是固定的,数据页都是16KB
      • 扇区 512B,一次磁盘IO,8个扇区一次来取,即4KB,通常设置一个16KB,数据如果超过16KB,则至少存储两行
      • 非叶子节点只存储索引信息,叶子节点记录数据信息
  • 索引实现:为什么是B+树而不是其他树(如平衡二叉搜索树)

    • 降低磁盘IO
    • 范围查询
    • 跳表也可以范围查询
  • 索引使用场景

    • where条件语句
    • group by
    • order by
  • 不要使用索引的场景

    • 没有where/group by/ order by
    • 列区分度不高则不需要使用索引
    • 经常修改的列
    • 表的数据量少(全表扫描可能会更快)
  • 外键约束:innodb可以用
    父表改动会影响子表

    create table parent (
    	id int not null,
    	primary key(id)
    	) engine=innodb;
    	create table child (
    	id int,
    	parent_id int,
    	foreign key(parent_id) references parent(id)
    	ON DELETE CASCADE ON UPDATE CASCADE
    	) engine=innodb;
    

    parent表中删除一行,对应id在child中的相同parent_id的那一行也会删除。

覆盖索引

  • 一种数据查询的方式
  • 针对是辅助索引
  • 直接通过辅助索引B+树就能获取要查询的值,而无需通过回表查询
  • 如果查询的内容就是索引值,那么不会进行回表查询
  • 在select中尽量只写需要的字段,不要select 。

最左匹配规则

  • 针对组合索引
  • 从左到右依次匹配,遇到 < >,between就会停止匹配

索引下推(面试重点)

  • 减少了回表查询次数,提高查询效率
  • 5.6版本后支持
  • 没有索引下推,server层向存储引擎层请求数据,在server层根据索引条件判断进行数据过滤
  • 有索引下推,可以将索引条件下推到存储引擎中过滤数据,最终由存储引擎把数据汇总再返回给server层。

索引存储

  • 数据页 16KB
  • 辅助索引在Change Pool:缓存非唯一索引的增删改数据(DML) 面试会问
  • 聚集索引Buffer Pool,缓存数据页;降低磁盘IO次数
  • 怎么判断某个页是否在缓存中?
    • 自适应hash索引,O(1),有在就去Buffer Pool取出来,增删改时,修改BufferPool中的内容,标记为脏页,异步刷盘

索引失效

  • 左模糊

    explain select * from index_failure_t where name like '谢%';
    

    在这里插入图片描述

    explain select * from index_failure_t where name like '%谢';
    

    在这里插入图片描述

  • 索引参与运算

    • 对索引使用函数
    • 进行表达式运算
    • 索引进行了隐式转换(本质还是使用函数)
    • 字符串和数字比较时,字符串会转换成数字
  • where

    • or非索引
    • in子查询

尽量减少索引,因为一个索引就是一颗B+树了

如何解决sql比较慢的问题

  1. 找到慢的sql语句:

    1. SHOW FULL PROCESSLIST

    2. 开启慢查询日志

    SET GLOBAL slow_query_log = ON; -- on 开启 off关闭
    SET GLOBAL long_query_time = 4; -- 单位秒;默认10s;此时设置为4s
    
  2. 分析sql语句

    1. 索引
      1. where
      2. group by
      3. order by
    2. SQL语句
    3. in优化成联合查询
    4. 减少联合查询。。?

工作中不要用age字段,要存储生日。

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

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

相关文章

【JavaWeb】JSP(172-190)

172.Jsp-什么是jsp&#xff0c;以及它有什么作用 jsp 的全换是 java server pages。Java 的服务器页面。 jsp 的主要作用是代替 Servlet 程序回传 html 页面的数据。 因为 Servlet 程序回传 html 页面数据是一件非常繁锁的事情。开发成本和维护成本都极高。 Servlet 回传 htm…

大白话讲解MySQL 索引,页分裂,行溢出,事务

目录 一、索引 索引是什么&#xff0c;页分裂 页的结构 mysql怎么查询数据 二、页合并 三、行溢出 四、事务 事务四大特性 1、原子性 2、一致性 3、隔离性 4、持久性 事务隔离级别 隔离级别导致的问题 隔离级别与锁的关系 锁与快照读、当前读的关系 RR快照读与…

网页信息采集-网页数据采集方法

随着社会不停的发展。人们也是越来越离不开互联网&#xff0c;今天小编就给大家盘点一下免费的网页信息采集&#xff0c;只需要点几下鼠标就能轻松爬取数据&#xff0c;不管是导出excel还是自动发布到网站都支持。详细参考图片一、二、三、四&#xff01; 企业人员 通过爬取动…

[附源码]计算机毕业设计JAVA创意众筹网站

[附源码]计算机毕业设计JAVA创意众筹网站 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…

JavaScript历史上的今天是星期几

前言 &#x1f44f;这个案例有很多点是我之前不知道的&#xff08;因为是小白&#xff09;&#xff0c;所以很值得学习&#xff0c; ✍编程不是打字机&#xff0c;⭐争取明白每个细节&#xff0c;并努力做的更好 步骤 1.html布局&#xff0c;一个下拉菜单&#xff08;如图&…

独家巨献!阿里专家兼Github贡献者业“大师级Dubbo实战笔记”入门到成神

Apache Dubbo是一款RPC服务开发框架&#xff0c;那何为RPC呢&#xff1f;全称为Remote Procedure Call&#xff0c;翻译过来就是远程过程调用。 使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力&#xff0c; 利用 Dubbo 提供的丰富服务治理特性&#xff0c;可…

ZYNQ使用AXI4-HP接口总线读取DDR中的数据

一、前言 最近笔者在做项目的时候需要使用zynq中的AXI4-HP总线在PL端读取DDR中的数据这种功能&#xff0c;但是网上很多历程对于这方面只是创建了一个官方提供的IP核用于测试&#xff0c;并且每次写入和读取的长度为4K字节。所以为了满足我自己的项目需求&#xff0c;笔者将官…

电脑桌面图标不见了怎么回事?正确的找回图标的2个方案

最近遇到很多用户朋友说自己的电脑桌面图标不见了&#xff0c;觉得很奇怪。用户以为是系统原因造成的。电脑桌面图标不见了怎么回事&#xff1f;图标删除了怎么办&#xff1f;这篇文章就给大家分享如何找回电脑桌面消失的图标&#xff0c;一起来看看吧&#xff01; 一、找回电脑…

DTPA PEG 异硫氰酸荧光素,DTPA PEG FITC,FITC-PEG-DTPA

产品名称&#xff1a;DTPA PEG 异硫氰酸荧光素 英文名称&#xff1a;DTPA PEG FITC&#xff0c;FITC-PEG-DTPA CAS&#xff1a;668-000-2 产地&#xff1a;西安 规格&#xff1a;1mg 5mg 10mg 纯度&#xff1a;99% 厂家&#xff1a;西安齐岳生物科技有限公司 用途&#…

arthas的监控java性能

目录1 arthas简介2 arthas下载3 arthas的使用3.1 arthas启动3.2 常用命令3.2.1 dashboard3.2.2 thread3.2.3 jad3.2.4 watch3.2.5 getstatic3.2.6 heapdump3.2.6.1 dump到指定的文件3.2.6.2 dump live 对象3.2.6.3 dump 到临时文件3.2.7 jvm3.2.8 logger3.2.9 mbean3.2.9.1 列出…

Baklib|我的企业是不是需要一个维基页面呢?

你很可能已经听说过维基百科。事实上&#xff0c;我们大多数人几乎每天都在使用维基百科来获取有关历史事件、名人或世界各地的有用信息。但是你知道公司也可以创建和维护他们自己的wiki页面吗? 随着时间的推移&#xff0c;公司会积累大量的信息。如果没有一个好的方法来存储…

Java:为什么要更新Java应用程序?

27年来&#xff0c;Java一直是企业软件开发中最流行的编程语言之一。世界上无数的系统都是使用这种广为人知的语言构建的。 传统的Java应用程序是独一无二的。它们的包中包含了运行应用程序所需的一切&#xff0c;但整体性使得开发人员在进行更改时很难保持敏捷。开发人员必须从…

项目实战——实现注册与登录模块(结尾)

目录 一、整体框架 二、前端页面授权 三、实现注册页面 四、实现登录状态的持久化 一、整体框架 二、前端页面授权 当我们登录网站的时候&#xff0c;如果没有登录&#xff0c;强制让用户重定向到 登录界面 在 router 目录下的 index.js 文件下实现。 router -> index.js…

DIVFusion:首个耦合互促低光增强图像融合的框架

DIVFusion:首个耦合互促低光增强&图像融合的框架DIVFusion:首个耦合互促低光增强&图像融合的框架写在前面问题引入Motivation主要贡献网络架构实验验证融合性能目标检测性能消融实验结论写在最后DIVFusion:首个耦合互促低光增强&图像融合的框架 论文&#xff1a;h…

攻防世界Running

Running 题目描述&#xff1a;无 题目环境&#xff1a;https://download.csdn.net/download/m0_59188912/87016663 一个可执行文件&#xff0c;执行后显示error&#xff0c;尝试binwalk文件分离。 命令&#xff1a;binwalk -e run.exe浏览分离出来的文件。 末尾发现一个run.ex…

mannose-CHO|甘露糖-醛基|甘露糖-聚乙二醇-醛基|醛基-PEG-甘露糖

mannose-CHO|甘露糖-醛基|甘露糖-聚乙二醇-醛基|醛基-PEG-甘露糖 羰基中的一个共价键跟氢原子相连而组成的一价原子团&#xff0c;叫做醛基&#xff0c;醛基结构简式是-CHO&#xff0c;醛基是亲水基团&#xff0c;因此有醛基的有机物&#xff08;如乙醛等&#xff09;有一定的…

APS高级排产软件在快消品行业的应用

快消行业是指消费频率高、使用时限短、拥有广泛的消费群体、对于消费的便利性要求很高的商品销售行业。快消行业的销售渠道种类多而复杂&#xff0c;传统业态和新兴业态等多种渠道并存。快消行业集中度逐步上升&#xff0c;竞争度加大。 随着快速消费品市场的复苏&#xff0c;经…

CNN学习笔记

目录 如何理解卷积层和池化层&#xff1f; 机器视角&#xff1a;长文揭秘图像处理和卷积神经网络架构 卷积神经网络 - 基础知识 激活函数的作用是什么&#xff1f; 激活函数&#xff08;加入非线性因素&#xff09; 提高模型鲁棒性&#xff08;抗干扰能力&#xff09;&#…

时间复杂度和空间复杂度详解

文章目录 引入 一、时间复杂度的详解及例题 1、时间复杂度的概念 2、时间复杂度的例题训练 2.1 实题训练1 2.2 实题训练2 2.3 实题训练3 2.4 实题训练4 2.5 大O符号&#xff08;Big O notation)的函数绘图 二、空间复杂度的详解及例题 1、空间复杂的的概念 2、空间复杂度…

Java注解与原理分析

使用的太多&#xff0c;被忽略的理所当然&#xff1b; 一、注解基础 注解即标注与解析&#xff0c;在Java的代码工程中&#xff0c;注解的使用几乎是无处不在&#xff0c;甚至多到被忽视&#xff1b; 无论是在JDK源码或者框架组件&#xff0c;都在使用注解能力完成各种识别和…