面向面试知识--MySQL数据库与索引

面向面试知识–MySQL数据库与索引

优化难点与面试点

什么是MySQL索引?

索引的MySQL官方定义:索引是帮助MySQL快速获取数据的数据结构。

动力节点原文:
MysQL官方对于索引的定义:索引是帮助MySQL高效获取数据的数据结构。
MysQL在存储数据之外,数据库系统中还维护着满足特定查找算法的数据结构,这些数据结构以某种引用(指向)表中的数据,这样我们就可以通过数据结构上实现的高级查找算法来快速找到我们想要的数据。而这种数据结构就是索引。
简单理解为:“排好序的,帮助我们快速查找数据的数据结构”

索引的分类

逻辑分类:

按照功能划分
  1. 主键索引:一张表只能有一个主键索引,不允许重复、不允许为null;
  2. 唯一索引:数据列不允许重复,允许为 NULL 值,一张表可有多个唯一索引,索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
  3. 普通索引:一张表可以创建多个普通索引,一个普通索引可以包含多个字段,允许数据重复,允许 NULL 值插入;(阿里开发者手册:高并发场景的表,索引数量控制在五个以内)
  4. 全文索引:它查找的是文本中的关键词,主要用于全文检索。(篇幅较长,下文有独立主题说明)
按照列数划分
  1. 单列索引:一个索引只包含一个列,一个表可以有多个单例索引。
  2. 组合索引:一个组合索引包含两个或两个以上的列。查询的时候遵循 mysql 组合索引的 “最左前缀”原则,即使用 where 时条件要按照建立索引的时候字段的排列方式放置索引才会生效。(索引失效的坑

物理分类:

聚簇索引

聚簇是为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组集中存放在连续的物理块。

聚簇索引(clustered index)不是单独的一种索引类型,而是一种数据存储方式。这种存储方式是依靠B+树来实现的,根据表的主键构造一棵B+树且B+树叶子节点存放的都是表的行记录数据时,方可称该主键索引为聚簇索引。聚簇索引也可理解为将数据存储与索引放到了一块,找到索引也就找到了数据。
优点
(查询和更新快)

  • 数据访问速度快,因为聚簇索引将索引和数据都放在同一棵B+树,因此聚簇索引中获取数据比飞聚簇索引更快;
  • 聚簇索引对于主键的排序查找和范围查找速度非常快。
    缺点
    (删除和插入慢)
  • 插入速度严重依赖于插入顺序;插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键主键列不要选没有意义的自增列,选经常查询的条件列才好,不然无法体现其主键索引性能);
  • 更新主键代价很高(不推荐更改主键);更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新。
  • 二级索引需要两次索引查找(回表);二级索引访问需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据。

补充:MySQL中,key、primary key、unique key、与index的区别。
详见文章一文搞懂MySQL索引(清晰明了)

非聚簇索引

数据和索引是分开的,B+树叶子节点存放的不是数据表的行记录。
虽然InnoDB和MyISAM存储引擎都默认使用B+树结构存储索引,但是只有InnoDB的主键索引才是聚簇索引,InnoDB中的辅助索引以及MyISAM使用的都是非聚簇索引。每张表最多只能拥有一个聚簇索引。

InnoDB和MyISAM索引实现,索引的数据结构

InnoDB索引实现

InnoDB使用B+树存储数据,除了主键索引为聚簇索引,其他索引均为非聚簇索引。
一个表中只能存在一个聚簇索引(主键索引),但是可以存在多个非聚簇索引。
InnoDB表和索引的数据是在一起的,表数据和索引的文件都放在.ibd文件中。

聚簇索引(主键索引)

B+树叶子节点包含数据表中行记录就是聚簇索引(索引和数据是存放在一块的)
在这里插入图片描述
可以看到叶子节点包含了完整的数据记录,这就是聚簇索引。因为InnoDB的数据文件(.idb)按主键聚集,所以InnoDB必须有主键(MyISAM可以没有),如果没有显示指定主键,则选取首个为唯一且非空的列作为主键索引,如果还没具备,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。
;
主键索引结构分析:

数据保存以key-value的形式保存。
B+树:所有的数据都存放在叶子结点,非叶子结点只保存键值方便查找;
B树:所有的结点都保存数据;
对于MySQL中的InnoDB数据库引擎的主索引,索引即数据,数据即索引。方便范围查找以及顺序查找;同时存在普通索引,帮助查找某些被查找频率较高的字段。如果需要较多索引,推荐使用联合索引,以提高索引的利用效率。

索引的优缺点

参考文章:一文搞懂MySQL索引(清晰明了)

MySQL体系结构:

在这里插入图片描述
自上而下分为四层:
① 网络接入层
② 服务层
③ 存储引擎层
④ 文件系统层

网络接入层

提供了应用程序进入MySQL服务的接口。客户端与服务器建立连接,客户端发送SQL到服务端。

服务层

管理工具和服务

系统管理和控制工具,例如备份恢复、MySQL复制、集群等。

连接池

主要负责连接管理、授权认证、安全等。
主要负责连接管理、授权认证、安全等等。每个客户端连接都对应着服务器上的一个线程。服务器上维护了一个线程池,避免为每个连接都创建销毁一个线程。当客户端连接到MySQL服务器时,服务器对其进行认证。可以通过用户名与密码认证,也可以通过SSL证书进行认证。登录认证后,服务器还会验证客户端是否有执行某个查询的操作权限。

SQL接口
查询解析器
查询优化器
缓存(8.0以前支持查询缓存,8.0之后就不支持了)

存储引擎层

索引是占用物理空间的,在不同的的存储引擎中,索引存在的文件也不同。存储引擎是给予表的,以下是分别使用MyISAM和InnoDB分别建立的两张表。


当存储引擎是MyISAM时:

  • *.frm:与表相关的元数据信息都存放在frm文件,包括表结构的定义信息等
  • *.MYD:MyISAM DATA,用于存储MyISAM表的数据
  • *.MYI:MyISAM INDEX,用于存储MyISAM表的索引信息
    当是InnoDB时,

文件系统层

*.frm:与表相关的元数据信息都存放在frm文件,包括表结构的定义信息等

  • *.ibd:InnoDB DATA,表数据和索引的文件。该表的索引(B+树)的每个非叶子节点存储索引,叶子节点存储索引和索引对应的数据

参考文章:10分钟了解MySQL体系构架、存储引擎和索引结构

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

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

相关文章

前后端分离的大数据毕设项目之基于Spark+springboot+vue的共享单车数据存储系统的设计与实现

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

【数据结构】—交换排序之快速排序究极详解,手把手带你从简单的冒泡排序升级到排序的难点{快速排序}(含C语言实现)

食用指南:本文在有C基础的情况下食用更佳 🔥这就不得不推荐此专栏了:C语言 ♈️今日夜电波:靴の花火—ヨルシカ 0:28━━━━━━️💟──────── 5:03 …

时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测

时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测 目录 时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测。…

C语言自定义类型详解(2)位断、枚举、联合知识汇总

本篇概要 本篇主要讲述C语言位断、枚举。联合的相关知识,包括哥哥自定义类型的基本声明,使用、优点。计算等相关知识。 文章目录 本篇概要1.位断1.1什么是位断?1.2 位段的内存分配1.3 位段的跨平台问题1.3 位段的应用 2.枚举2.1 枚举类型的声…

文件操作(2)

目录 文件操作的步骤: 流: 标准流: 文件指针: 文件信息区: 概念: 关系转化: 注意: 文件指针: 文件的打开和关闭: 打开方式: 打开成…

阿里云2核2G服务器e系列租用优惠价格182元性能测评

阿里云服务器经济型e实例2核2G配置优惠价格182.04元一年,系统盘ESSD Entry盘20GB起,公网带宽默认按使用流量,也可以选择按固定带宽计费,带宽值从1M到100M可选,阿腾云分享阿里云服务器2核2G优惠价格、详细配置及e系列CP…

(本地安装clickhouse)执行 nstall/doinst.sh时报错: cp: 无法创建普通文件“/usr/bin/clickho

问题描述 在本地安装clickhouse时, 解压:tar -zxvf clickhouse-common-static-21.9.4.35.tgz -C ../module/ 再进入cd clickhouse-common-static-21.9.4.35/ 执行:install/doinst.sh 报错 报错信息和截图: rootbigdata1 click…

CorelDraw是什么软件?好用吗

很多人都听过CorelDraw的名字,但不知道CorelDraw是什么样的软件。下面就让小编为大家详细介绍一下。 coreldraw是什么软件 CorelDraw是一款专业的图形设计软件。它的主要功能包括矢量图形和位图的编辑。用户可以利用其矢量图形编辑能力,设计各种图标、Logo等精细图…

数据结构与算法(C语言版)P2---线性表之顺序表

前景回顾 #mermaid-svg-sXTObkmwPR34tOT4 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-sXTObkmwPR34tOT4 .error-icon{fill:#552222;}#mermaid-svg-sXTObkmwPR34tOT4 .error-text{fill:#552222;stroke:#552222;}#…

C语言自定义类型详解(1)结构体知识汇总

本篇概要 本篇主要讲述C语言结构体的相关知识,包括结构体的基本声明,结构体的匿名结构,结构体的自引用,结构体变量的定义和初始化以及结构体的内存对齐等相关知识。 文章目录 本篇概要1.结构体1.1结构体的基本声明1.2结构体的特殊…

C# 查找迷宫路径

1.导入图像&#xff0c;并且将图像转灰度 using var img new Image<Bgr, byte>(_path); using var grayImg img.Convert<Gray, byte>(); 2.自动二值化图像 using var inputGrayOut new Image<Gray, byte>(grayImg.Size); // 计算OTSU阈值 var threshol…

C语言字符和字符串函数(2)

大家好&#xff0c;我今天继续来给大家分享C语言中的字符和字符串函数。 目录 ** 1.字符分类函数 2.memcpy 3.memmove 4.memcmp** 1.字符分类函数 islower判断字母小写函数 int main() {char ch w;if (islower(ch)){printf("小写\n");}else{printf("非小写\…

MQ - 26 基础功能:顺序消息和幂等的设计

文章目录 导图概述顺序消息的定义和实现消息队列的存储结构特性基于顺序存储结构的设计主流消息队列的实现机制幂等机制的定义和实现消息队列中幂等的定义生产幂等的设计实现1. 通过消息唯一 ID 实现幂等2. 通过生产者 ID 和自增序号实现幂等Kafka 的幂等机制的实现方案总结导图…

基于JAVA+SpringBoot+Vue+协同过滤算法+爬虫的前后端分离的租房系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着城市化进程的加快…

2023年研赛华为杯选题人数发布

选题人数发布&#xff01;经过长达30个小时&#xff0c;各个平台的相关选题投票、相关文章阅读量等各项数据进行统计&#xff0c;利用之前的评估办法&#xff08;详见注释&#xff09;。在开赛后30小时&#xff0c;我们基本确定各个赛题选题人数&#xff0c;大致为 题号选题人数…

Mac 上如何安装Mysql? 如何配置 Mysql?以及如何开启并使用MySQL

前言&#xff1a; 有许多开发的小伙伴&#xff0c;使用的是mac&#xff0c;那么在mac上如何安装&#xff0c;配置Mysql&#xff0c;以及使用Mysql了&#xff0c;今天来一个系统的教程。 安装Mysql 使用mysql前&#xff0c;我们需要先下载mysql&#xff0c;并按照以下几个步骤…

Redis延迟双删-架构案例2021(三十二)

数据库设计 某医药销售企业因业务发展&#xff0c;需要建立线上药品销售系统&#xff0c;为用户提供便捷的互联网药品销售服务、该系统除了常规药品展示、订单、用户交流与反馈功能外&#xff0c;还需要提供当前热销产品排名、评价分类管理等功能。 通过对需求的分析&#xf…

前端第二课,HTML,alt,title,width/heigh,border,<a>超链接,target,tr,td,th

目录 一、title: &#x1f49b; ​二、alt&#x1f499; 三、width/heigh&#x1f49c; 四、border ❤️ 五、超链接&#x1f49a; 六、target &#x1f497; 七、tr&#x1f495; 八、td&#x1f498; 九、th&#x1f49e; 十、rowspan 一、title: &#x1f49b; 快…

js-cookie使用 js深度克隆(判断引用类型是数组还是对象的方法)

cookie和深度拷贝的使用 1、js-cookie使用2、js深度克隆 1、js-cookie使用 前端的本地存储分为 localstorage、sesstionstorage、cookie 但是咱们有时候需要做7天免登录的需求时&#xff0c;选择 cookie 作为前端的本地存储是在合适不过的了 直接操作 cookie 可以&#xff0c; …

名义实际GDP-各地区-原始和结果(2000-2022年)

一、数据介绍 数据名称&#xff1a;名义、实际GDP-各地区-原始和结果 数据年份&#xff1a;2000-2022年 计算公式&#xff1a;实际GDP 名义GDP / GDP折算指数 数据基期&#xff1a;2000年 数据整理&#xff1a;自主整理 二、数据用途 数据用途 文献依据 经济发展水平 …