当前位置: 首页 > news >正文

mysql 一些知识点 面试用

mysql

  • 1、4个隔离级别与3个现象
  • 2、快照读与当前读
    • 2.1 可重复读的情况下出现幻读问题的两种情况
  • 3 数据库 常用引擎
  • 4、InnoDB存储引擎对MVCC的实现
  • 5、索引(重点)
    • 5.1 什么是索引
    • 5.2 索引的创建与删除
      • 5.2.1 查看表中有哪些索引
      • 5.2.2 添加索引
      • 5.2.3 删除索引
    • 5.3 索引的分类
    • 5.4 树数据结构
      • 5.4.1 二叉树 排序二叉树
      • 5.4.2 红黑树(自平衡二叉树
      • 5.4.3 B 树
      • 5.4.4 B+ 树
    • 5.5 其他索引及相关调优
      • 5.5.1 哈希索引
      • 5.5.2 聚集(簇)索引和非聚集(簇)索引
      • 5.5.3 二级索引
      • 5.5.4 覆盖索引
      • 5.5.5 索引下推
      • 5.5.6 单一索引和复合索引(联合索引
        • 5.5.6.1 索引最左匹配
    • 5.6 索引优缺点
    • 5.7 何时用索引
    • 5.8 SQL性能分析工具
    • 5.9 索引失效的情况
      • 5.9.1 索引列参加了运算
      • 5.9.2 模糊查询以%开始
      • 5.9.3 索引列是字符串类型,但查询时省略了单引号
      • 5.9.4 查询条件中有or,只要有未添加索引的字段,索引失效
      • 5.9.5 当查询的符合条件的记录在表中占比较大,索引失效
      • 5.9.6 关于is nuIl和is not null的索引失效问题
  • 6 存储过程
  • 7、事务日志
    • 7.1 重做日志

1、4个隔离级别与3个现象

SQL 标准定义了四个隔离级别:
READ-UNCOMMITTED(读取未提交) :最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
READ-COMMITTED(读取已提交) :允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
REPEATABLE-READ(可重复读) :对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。 (INNODB 默认的隔离级别)
SERIALIZABLE(可串行化) :最高的隔离级别,完全服从 ACID 的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。
在这里插入图片描述
三个现象

脏读 :即读取未提交的数据

不可重复读: 即读取同一个数据行,内容不一致

幻读
不可重复读 关注的是同一条记录在两次读取之间被其他事务修改的情况。
幻读 关注的是同一查询条件下,结果集中行数在两次读取之间发生变化的情况。

2、快照读与当前读

在可重复读的隔离级别下

快照读解决幻读问题 采用MVCC 多版本并行控制
即undo 与redo
在这里插入图片描述
当前读解决幻读问题 采用 next-key lock 即 间隙+记录锁
间隙锁防止增加数据 记录锁防止修改删除数据
当前读只是阻止了对当前查询数据的锁定,大多数是数据表中的某几行,但是如果采用并行化则会阻止整个数据库。
在这里插入图片描述

2.1 可重复读的情况下出现幻读问题的两种情况

① 刚开始采用快照读 后来又采用当前读 则会导致幻读问题
②刚开始采用快照读,但是后来执行了DML语句,又执行快照读,则也会出现幻读。

可重复读的隔离级别不会完全防止幻读的出现。

如果想尽量出现幻读,则在刚开始时就进行当前读,对要读取的数据进行锁定/

3 数据库 常用引擎

在这里插入图片描述

4、InnoDB存储引擎对MVCC的实现

InnoDB存储引擎对MVCC的实现

5、索引(重点)

5.1 什么是索引

索引是一种能够提高检索(查询)效率的提前安排好序的数据结构。
索引是解决sql慢查询的一种方式。

mysql 索引 数据结构默认采用B+树

5.2 索引的创建与删除

会自动添加索引的情况

在这里插入图片描述

5.2.1 查看表中有哪些索引

show index  from 表名

5.2.2 添加索引

在这里插入图片描述

5.2.3 删除索引

在这里插入图片描述

5.3 索引的分类

在这里插入图片描述
按照数据结构:
B+索引:
Hash索引:只有Memory引擎支持该索引
按照物理存储方式:
非聚集索引(索引与表的内容不在一起,一张表可以有多个索引
聚集索引(索引与表的内容数据在一起,一张表只能有一张索引
按照字段的特性分类
主键索引
唯一索引
普通索引
全文索引(对字段内容有约束,字段类型必须是文本内容
按照字段个数分类:
单列索引,联合索引(复合索引,组合索引

5.4 树数据结构

树的高度越低,性能越高,因为每一个节点都是一次IO

5.4.1 二叉树 排序二叉树

不在赘述
会有极端情况
在这里插入图片描述

5.4.2 红黑树(自平衡二叉树

自己平衡,但没有平衡二叉树那样严格

在这里插入图片描述
在这里插入图片描述
缺点:数据量很庞大,由于每个节点只有两个分叉,树的高度仍然很高。

5.4.3 B 树

更矮更胖。查询效率会更高,每个结点不止存储一个数据。
3阶的话,一个结点可以存储两个数据,

。

在这里插入图片描述

5.4.4 B+ 树

mysql采用16阶。非叶子结点只存放索引值,叶子结点才存放数据。

在这里插入图片描述

5.5 其他索引及相关调优

5.5.1 哈希索引

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.5.2 聚集(簇)索引和非聚集(簇)索引

在这里插入图片描述

InnoDB 中,一个表只能有一个聚集索引,通常由主键承担。
为其他字段添加索引会创建非聚集索引,这些索引不会改变数据的物理存储顺序,也不会成为聚集索引。
非聚集索引的叶子节点存储的是索引字段的键值和指向数据行的指针,而聚集索引直接存储数据行。

在这里插入图片描述
优点就是效率高,查询的时候能直接查询到数据。
但是缺点是 由于数据保存在b+树上,就会导致,我们删除修改插入数据时需要更新索引树,有开销,而不是去直接更新物理上具体的表内容。

5.5.3 二级索引

在这里插入图片描述
在这里插入图片描述
假设有一张表 my_table,定义如下:

CREATE TABLE my_table (id INT PRIMARY KEY,name VARCHAR(100),age INT,INDEX (age)
) ENGINE=InnoDB;

主键 id 是聚集索引,表中的数据将按照 id 的顺序存储。
索引 age 是非聚集索引,它的叶子节点存储的是 age 的值以及与该 age 对应的 id 值。当你通过 age 字段查询时,数据库首先通过 age 索引找到对应的 id,然后再根据 id 从表中获取完整的数据行。

5.5.4 覆盖索引

在这里插入图片描述

5.5.5 索引下推

通过减少回表次数,通常建立在多列索引的基础之上。
在这里插入图片描述
覆盖索引 其实是不需要回表了 但是索引下推仍然是需要回表的 只是会减少回表次数

5.5.6 单一索引和复合索引(联合索引

5.5.6.1 索引最左匹配
CREATE TABLE test (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,Co11 INT,Co12 INT,CO13 INT
);CREATE INDEX idx_c1c2 ON test(Co11, Co12);
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a136067884c24a5a855d2bd122e06573.png)

执行

EXPLAIN SELECT * FROM test t WHERE Co11 =100 AND Co12 = 100;

我们可以看到 是用索引来检索的
在这里插入图片描述

只用Col1,也是进行的范围搜索
在这里插入图片描述

如果只有cOL2 则就是全表扫描。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.6 索引优缺点

在这里插入图片描述

5.7 何时用索引

在这里插入图片描述

5.8 SQL性能分析工具

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.9 索引失效的情况

5.9.1 索引列参加了运算

没参加运算正常情况:
在这里插入图片描述

参加了运算: 索引失效。全表扫描
在这里插入图片描述

5.9.2 模糊查询以%开始

上述已经有过案例了,不再阐述。

5.9.3 索引列是字符串类型,但查询时省略了单引号

CREATE TABLE test1 (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,Co11 VARCHAR(255),Co12 INT,CO13 INT
);CREATE INDEX idx_c1c2 ON test1(Co11, Co12);

在这里插入图片描述
在这里插入图片描述

5.9.4 查询条件中有or,只要有未添加索引的字段,索引失效

因为索引加在col1 和col2 上,两个是一起的,所以or col2 和仅仅使用col2是相同的,都会全表扫描,但是如果是and 就是索引。

在这里插入图片描述
在这里插入图片描述

5.9.5 当查询的符合条件的记录在表中占比较大,索引失效

因为这时候 和全表扫描 没什么区别了,使用索引还需要回表,所以不会有什么提升。

5.9.6 关于is nuIl和is not null的索引失效问题

和 上述 占比较大 是一样的。
如果把表中的一列都设置为空,如果你查询都为空的则都占了,直接全表扫描了。

6 存储过程

数据库内置的编程语言。
优缺点:
在这里插入图片描述

7、事务日志

在这里插入图片描述

7.1 重做日志

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

相关文章:

mysql 一些知识点 面试用

mysql 1、4个隔离级别与3个现象2、快照读与当前读2.1 可重复读的情况下出现幻读问题的两种情况 3 数据库 常用引擎4、InnoDB存储引擎对MVCC的实现5、索引(重点)5.1 什么是索引5.2 索引的创建与删除5.2.1 查看表中有哪些索引5.2.2 添加索引5.2.3 删除索引 5.3 索引的分类5.4 树数…...

STM32之点亮LED灯

使用固件库实现LED点灯 LED灯: LED灯,是一种能够将电能转化为可见光的半导体器件 控制LED灯: LED灯的正极接到了3.3V,LED灯的负极接到了PA1,也就是GPIOA1引脚 只需要控制PA1为相对应的低电平,即可点亮对…...

Java 多线程练习2 (抽奖比较Runnable写法)

MultiProcessingExercise2 package MultiProcessingExercise120240814;import java.util.ArrayList; import java.util.Collections;public class MultiProcessingExercise1 {public static void main(String[] args) {// 需求:// 在此次抽奖过程中,抽奖…...

使用fastboot更新部分系统

使用fastboot更新部分系统 获取分区信息 > part list sunxi_flash 0Partition Map for UNKNOWN device 0 -- Partition Type: EFIPart Start LBA End LBA NameAttributesType GUIDPartition GUID1 0x00008000 0x000097c5 "boot-r…...

windows 加载portch遇到的错误

import torch 遇到如下错误 File "<stdin>", line 1, in <module> File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\torch\__init__.py", line 148, in <module> raise err OSError: [W…...

如何将 CICD 模版重构为 CICD component?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…...

数学建模——评价决策类算法(层次分析法、Topsis)

一、层次分析法 概念原理 通过相互比较确定各准则对于目标的权重, 及各方案对于每一准则的权重&#xff0c;这些权重在人的思维过程中通常是定性的, 而在层次分析法中则要给出得到权重的定量方法. 将方案层对准则层的权重及准则层对目标层的权重进行综合, 最终确定方案层对目标…...

KEEPALIVED 全csdn最详细----理论+实验(干货扎实,包教会的)

环境准备 主机名IP虚拟IP&#xff08;VIP&#xff09;功能ka1172.25.254.10172.25.254.100keepalived服务ka2172.25.254.20172.25.254.100keepalived服务realserver1172.25.254.110web服务realserver2172.25.254.120web服务 注意一定要关闭selinux,和防火墙&#xff0c;不然在…...

微信云开发云存储全部下载

一、安装 首先按照这个按照好依赖 安装 | 云开发 CloudBase - 一站式后端云服务 npm i -g cloudbase/cli 二、登录 tcb login 下载 首先在你要下载到的本地文件内创建一个名为&#xff1a;cloudbaserc.json 的json文件。 填入你的id {"envId":"你的云开发环…...

vos3000怎样对接voip落地语音网关呢?卡机和O口网关的配置技巧有哪些?

很多朋友没有接触过vos系统的使用&#xff0c;那么vos3000如何对接voip落地网关呢&#xff1f;卡机的配置技巧有哪些&#xff1f; VOS3000系统是针对中小等规模VoIP运营业务提供的支撑系统。 语音网关 落地网关分O口网关&#xff0c;S口网关&#xff0c;和全网通GOIP语音网关。…...

MySQL数据库专栏(四)数据库操作

1、创建数据库 create database if not exists [数据库名称] character set [字符集] COLLATE [排序规则]; 例如&#xff1a;create database if not exists db_demo character set utf8mb4 COLLATE utf8mb4_general_ci; if not exists&#xff1a;判断数据库是否存在&#x…...

Python编写Word文档

目录 0. 安装依赖 1. 创建word文档 2. 添加标题、居中、字体16大小 3. 添加标题一 4. 添加一段话并设置字体颜色 封装函数 5. 换页 6. 插入表格 0. 安装依赖 python-docx1.1.2 1. 创建word文档 from docx import Documentdoc Document() 2. 添加标题、居中、字体1…...

聚星文社AI工具

聚星文社AI工具是一款基于人工智能技术的文学创作辅助工具。聚星文社AI工具https://docs.qq.com/doc/DRU1vcUZlanBKR2xy 它能够帮助作者生成文字内容、自动校对、提供创作灵感等功能。 通过聚星文社AI工具&#xff0c; 作者可以更快速地完成文学作品的创作&#xff0c;提高创…...

思科OSPF动态路由配置8

#路由协议实现# #任务八OSPF动态路由配置8# 开放式最短路径优先&#xff08;Open Shortest Path First,OSPF&#xff09;协议是目前网络中应用最广泛的动态路由协议之一。它也属于内部网关路由协议&#xff0c;能够适应各种规模的网络环境&#xff0c;是典型的链路状态路由协…...

C++(10)类语法分析(1)

C(10)之类语法分析(1) Author: Once Day Date: 2024年8月17日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 源码分析_Once-Day的博客-CSDN博客 …...

python语言day6 os random datetime .ini文件

os&#xff1a; 获取运行当前py文件的绝对路径&#xff1a; abspath中添加路径&#xff0c;会直接和绝对路径拼接。 folder_path os.path.abspath("") print(folder_path) 路径拼接&#xff1a; mac系统路径&#xff1a;file/TranslucentTB win系统路径&#xff1a;…...

powershell 终端 执行 pnpm -v报错

1.问题描述&#xff1a; 明明全局已安装 pnpm &#xff0c;但在vscode默认终端 powershell 执行 pnpm -v 却报错&#xff1a; 2.问题根因&#xff1a; 原因是 PowerShell 执行策略问题。 3.解决方案&#xff1a; 以管理员身份运行 PowerShell 查看 PowerShell 的执行策略…...

最新保姆级Anaconda和Pycharm安装激活过程(2024最新版本)

Anaconda和Pycharm安装过程 Anaconda安装过程第一步第二步第三步第四步第五步第六步第七步第八步第九步Pycharm 安装过程&#xff1a;第一步第二步第三步第四步第五步第六步---激活过程第七步第八步第九步第十步第十一步第十二步第十三步第十四步Anaconda和Pycharm软件百度网盘…...

虚幻5|布料模拟

打开骨骼网格体 1.Mass Prooerties 如果给角色施加风力&#xff0c;密度越大越难飘&#xff0c;相反密度越小飘动浮度也小 2.Material Proerties Edge Stiffness,对衣服的折痕处的调整&#xff0c;其值越大就越能维持原本的折痕&#xff0c;相反折痕就会变小&#xff0c;但…...

K8S 存储

K8S&#xff08;Kubernetes&#xff09;的存储是容器化应用程序中非常重要的一部分&#xff0c;它帮助用户在不同场景下管理和存储数据。K8S提供了多种存储方式&#xff0c;以满足不同的存储需求。以下是对K8S存储的详细解析&#xff1a; 一、K8S存储类型 K8S的存储类型主要分…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...