MySQL-存储引擎和索引

1.MySQL的基础架构是什么?

在这里插入图片描述

MySQL由连接器、分析器、优化器、执行器和存储引擎这五部分构成。

一条SQL的执行流程:

  1. 通过连接器连接数据库,检查用户名和密码,以及权限校验,是否有增删改查的权限。
  2. 在MySQL8.0之前,连接完数据库后会先判断缓存是否有数据,如果执行过这个SQL语句,直接返回。8.0之后没有了缓存,直接进入分析器,进行词法分析判断执行的什么操作,语法分析检查语句是否存在问题。
  3. 进入优化器,选择合适的索引以及查询的顺序,由优化器指定执行计划。
  4. 进入执行器之前先进行权限校验,权限信息是从连接器中取出来的,权限没问题就开始执行。
  5. 最后由存储引擎负责读写数据,MySQL默认的存储引擎是InnoDB,采用Buffer Pool来减少对磁盘的直接I/O,并通过redo logundo log来保证事务的持久性和原子性。

SQL语句的执行顺序是From子句返回初始结果集,WHERE子句排除不满足条件的行,GROUP BY子句进行分组,HAVING子句排除不满足条件的组,最后经过ORDER BY子句对结果集进行排序。

2.MySQL中有哪些存储引擎?

MySQL中的存储引擎是插件式的,可以为不同的数据库表设置不同的存储引擎。主要有四种存储引擎,InnoDBMyISAMMemoryArchive

  1. InnoDB是支持事务完整的ACID特性的,MyISAM、Memory和Archive都不支持事务。
  2. InnoDB和Archive采用的是行级锁,而MyISAM和Memory采用的是表级锁。
  3. InnoDB支持外键,保证数据的完整性,而其它的存储引擎都不支持外键。
  4. InnoDB通过redo logundo log来实现崩溃后的自动恢复,其他几种存储引擎不支持崩溃后的自动恢复。
  5. InnoDB的存储方式是数据与索引一体,MyISAM是数据与索引分离。Memory存储在内存,Archive进行压缩存储。
  6. InnoDB主要用于高并发的场景下,MyISAM适合静态读,Memory适合存放临时数据,Archive存放归档数据。

3.什么是MySQL索引?

创建索引的目的就是加快检索速度,但是维护索引需要耗费性能。

  1. MySQL索引默认采用的数据结构是B+树,B+树的数据全部存放在叶子节点上,这样就可以组织更宽的树,树高就会降低,减少磁盘I/O。
  2. B+树采用双向链表,非常适合范围查询和排序。

4.什么是二级索引(非聚簇索引)?

非聚簇索引就是非主键做为索引,可以有多个,叶子节点存放的是主键值

5.什么是聚簇索引?

聚簇索引就是将主键做为索引,只能有一个,叶子节点存放的是整行数据。如果表中没有主键,默认使用唯一字段做为索引,如果没有唯一字段就采用隐藏字段rowid做为索引。

6.什么是回表查询?

回表查询就是通过非聚簇索引找到主键值,再通过聚簇索引找到对应的数据。非聚簇索引不一定回表查询,比如查询用户名,用户名正好建立了索引,直接返回就可以。

7.什么是覆盖索引?

覆盖索引就是查询使用了索引,返回的字段必须在索引中全部找到。覆盖索引查询就是一次性查询,不需要回表查询。如果我们使用主键进行查询,那么就会采用聚簇索引返回所有字段的数据,这就是覆盖索引查询。

8.什么是联合索引?

联合索引就是多个字段创建的索引,相比于单列索引,每个索引对应一颗B+树,而联合索引只需要一颗B+树。最左匹配原则就是在使用联合索引时,MySQL会按照字段的顺序,从左到右依次查询字段。需要注意的是,如果查询条件中存在范围查询,从这个范围列开始就不会继续向后匹配索引了。我们在使用联合索引的时候,将区分度最高的字段放到左边,这样可以过滤更多的数据。

9.如何选择合适的字段创建索引?

  1. 选择不为NULL的字段
  2. 选择查询频繁的字段
  3. 选择做为查询条件的字段
  4. 选择频繁排队的字段

10.什么情况下索引会失效?

  1. 组合索引未遵循最左匹配原则
  2. 索引上进行计算、类型转换等操作
  3. 使用%开头的LIKE模糊查询
  4. 查询条件使用OR但是有一列没有索引

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

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

相关文章

安卓性能调优之-掉帧测试

掉帧指的是某一帧没有在规定时间内完成渲染,导致 UI 画面不流畅,产生视觉上的卡顿、跳帧现象。 Android目标帧率: 一般情况下,Android设备的屏幕刷新率是60Hz,即每秒需要渲染60帧(Frame Per Second, FPS&a…

【运维自动化-标准运维】职能化功能如何使用?

职能化功能主要用于一些固化的标准流程可以通过权限开放的方式给到那些负责固定职能的非运维人员,比如外包操作员来执行操作,如此可以释放一些运维的人力,让其可以专注流程的建设和优化。实操演示 新建职能化流程(运维角色操作&a…

游戏引擎学习第224天

回顾游戏运行并指出一个明显的图像问题。 回顾一下之前那个算法 我们今天要做一点预加载的处理。上周刚完成了游戏序章部分的所有剪辑内容。在运行这一部分时,如果观察得足够仔细,就会注意到一个问题。虽然因为视频流压缩质量较低,很难清楚…

【小沐学GIS】基于C++绘制三维数字地球Earth(QT5、OpenGL、GIS、卫星)第五期

🍺三维数字地球系列相关文章如下🍺:1【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第一期2【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第二期3【小沐学GIS】…

OpenAI 最新发布的 GPT-4.1 系列在 API 中正式上线

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

【力扣】day1

文章目录 27.移除元素26. 删除有序数组的重复项 27.移除元素 26. 删除有序数组的重复项 我们仔细看一下这两道题的最后的返回值,为什么第一题返回slow 而第二题返回slow1 最后的返回值该如何返回绝对不是凭感觉,我们自己分析一下第一个slow,从0位置开始, 遇到val值就开始和fas…

完全无网络环境的 openEuler 系统离线安装 ClamAV 的详细步骤

准备工作(在外网机器操作) 1. 下载 ClamAV RPM 包及依赖 mkdir -p ~/clamav-offline/packages cd ~/clamav-offline/packages# 使用 yumdownloader 下载所有依赖包(需提前安装 yum-utils) sudo dnf install yum-utils -y sudo y…

3.2.2.2 Spring Boot配置视图控制器

在Spring Boot中配置视图控制器可以简化页面跳转跳逻辑。通过实现WebMvcConfigurer接口的addViewControllers方法,可以直接将URL映射到特定的视图,而无需编写控制器类。例如,将根路径"/"映射到welcome.html视图,当访问应…

数据库—函数笔记

一,数据库函数的分类 内置函数(Built-in Functions) 数据库系统自带的函数,无需额外定义即可直接调用。 聚合函数:对数据集进行计算(如 SUM, AVG, COUNT)。 字符串函数:处理文本数据…

YOLOv2训练详细实践指南

1. YOLOv2架构与原理详解 1.1 核心改进点 YOLOv2相比YOLOv1的主要改进: 采用Darknet-19作为backbone(相比VGG更高效)引入Batch Normalization提高稳定性与收敛速度使用anchor boxes机制代替直接预测边界框引入维度聚类确定anchor boxes尺寸…

详解如何复现DeepSeek R1:从零开始利用Python构建

DeepSeek R1 的整个训练过程,说白了就是在其基础模型(也就是 deepseek V3)之上,用各种不同的强化学习方法来“雕琢”它。 咱们从一个小小的本地运行的基础模型开始,一边跟着 DeepSeek R1 技术报告 的步骤,…

MCP Server 开发实战 | 大模型无缝对接 Grafana

前言 随着大模型的飞速发展,越来越多的 AI 创新颠覆了过往很多产品的使用体验。但你是否曾想过,在向大型语言模型提问时,它能否根据你的需求精准返回系统中的对应数据?例如,当用户查询 Grafana 服务时,模型…

块存储、文件存储和对象存储的特点、应用场景及区别

块存储、文件存储和对象存储的特点、应用场景及区别 块存储 特点:块存储将数据分割成固定大小的块,每个块都有唯一的标识符。数据以块为单位进行读写操作,适合需要高性能和低延迟的场景。 应用场景:数据库存储、虚拟机磁盘、高性能…

OpenCv--换脸

引言 在当今数字化时代,图像处理技术的发展日新月异。换脸技术作为其中一项极具趣味性和挑战性的应用,吸引了众多开发者和爱好者的目光。OpenCV 作为一款强大的开源计算机视觉库,为我们实现换脸提供了丰富的工具和方法。本文将深入探讨如何使…

安卓基础(SQLite)

基础 import sqlite3# 连接到数据库 conn sqlite3.connect(mydatabase.db) cursor conn.cursor()# 执行查询 cursor.execute("SELECT * FROM users") rows cursor.fetchall()for row in rows:print(row)# 关闭连接 conn.close() 创建一个继承自 SQLiteOpenHelpe…

QuickAPI 核心能力解析:构建数据服务化的三位一体生态

在企业数据资产化运营的进程中,如何打破数据开发与共享的效率瓶颈,实现从 “数据可用” 到 “数据好用” 的跨越?麦聪软件的 QuickAPI 给出了系统性答案。作为 SQL2API 理念的标杆产品,QuickAPI 通过SQL 编辑器、数据 API、数据市…

《计算机视觉度量:从特征描述到深度学习》—生成式人工智能在工业检测的应用

2022 年 11 月 30 日一个很重要的标志事件就是chatgpt的出现,打开了生成式人工智能的开端。这也许会是一个历史性的时刻,今天是2025年4月,过去两年多,那个时刻目前回想还是对本人造成了冲击,一个完全有自主分析能力的生…

【软件测试】自动化测试框架Pytest + Selenium的使用

Pytest Selenium 是一种常见的自动化测试框架组合,用于编写和执行 Web 应用程序的自动化测试。Pytest 是一个强大的 Python 测试框架,而 Selenium 是一个用于浏览器自动化的工具,二者结合使用可以高效地进行 Web 应用的功能测试、UI 测试等。…

煤矿湿喷砂浆搅拌机组创新设计与关键技术研究

引言&#xff1a;湿喷工艺在煤矿支护中的革命性意义 在深部煤矿巷道支护领域&#xff0c;湿喷混凝土技术以其回弹率低&#xff08;<15%&#xff09;、粉尘浓度小&#xff08;<10mg/m&#xff09;的显著优势&#xff0c;逐步取代传统干喷工艺。作为湿喷工艺的核心设备&am…

如何处理ONLYOFFICE文档服务器与Java Web应用间的安全认证和授权

如何处理ONLYOFFICE文档服务器与Java Web应用间的安全认证和授权&#xff1f; 处理 ONLYOFFICE 文档服务器与 Java Web 应用之间的安全认证和授权&#xff0c;通常涉及以下几个关键步骤和技术&#xff1a; 1. JWT (JSON Web Token) 认证 启用 JWT&#xff1a; ONLYOFFICE 文档…