mysql 一些知识点 面试用

news2024/9/20 17:42:53

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 重做日志

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

web技术1——jdk目录结构(重要),tomcat服务器

jdk文件夹结构(重要) bin目录: 里面都是.exe可执行文件。java,javac,javadoc,java编译工具,java监测工具等.exe文件都在这里。 include目录: 底层有用c写的东西,这里面包含很多c语言的文件&#xff0c…

Ok, Boomer

目录 一、题目 二、思路 三、payload 3.1 方案一 3.2 方案二 四、思考与总结 一、题目 <!-- Challenge --> <h2 id"boomer">Ok, Boomer.</h2> <script>boomer.innerHTML DOMPurify.sanitize(new URL(location).searchParams.get(boome…

DAM-E3505N以太网口三相400V 100A全参数交流电量采集模块Modbus-TCP协议

品牌&#xff1a;阿尔泰科技 型号&#xff1a;DAM-E3505 简介&#xff1a; DAM-E3505N为三相全参数交流电量采集模块&#xff0c;以太网通讯接口&#xff0c;支持标准Modbus-TCP协议。配备良好的人机交互界面&#xff0c;使用方便&#xff0c;性能稳定。 指标参数&#xff1…

破解 Google 账户注册难题丨0到1学习谷歌广告(1)

立了个flag&#xff0c;连载系列&#xff0c;把主流渠道的0到1细节都写一遍。 做跨境电商&#xff0c;要投谷歌广告&#xff0c;拥有一个Google账户已成为我们不可或缺的一部分。今天&#xff0c;就让我们一起来聊聊如何轻松注册一个属于你自己的Google账户。 为什么需要Googl…

【深度学习入门】深度学习概述

一、什么是人工智能 机器人能够通过“眼睛”看到这个世界&#xff0c;并对这个世界加以理解&#xff0c;最后做出一些决策。因此人工智能具有 感知理解决策 的能力。 人类能够站在食物链顶端的关键是具有学习的能力&#xff0c;这是智能的本质。 简而言之&#xff0c;人工智能就…

【数据结构篇顺序表】算法题

1. 移除元素​https://leetcode.cn/problems/remove-element/description/​sorted-array/description/​ 1.思路 这个题要删除数组中等于 val的元素&#xff0c;然后返回数组中剩余的元素个数 那么肯定是要用到循环的&#xff0c;先给两个指针 l1,l2&#xff0c;开始时l1和…

学网安兴趣最重要

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…

Matplotlib-绘图基础

文章目录 一、安装Matplotlib二、基本绘图流程1.创建画布与创建子图2.基本绘图1&#xff09;.绘制线条2).设置线型、线宽格式化字符颜色的缩写 3).设置坐标轴范围4).设置坐标刻度5).设置坐标轴6&#xff09;备注 三、高级绘图1&#xff09;plt对象支持的图类型2&#xff09;散点…

【Linux】——进程概念(万字解读)

一 冯诺依曼体系结构 在此之前&#xff0c;我们先要理解我们计算机的冯诺依曼体系结构&#xff0c;因为是进程的基础 我们所有的操作其实都是基于这样一个模型&#xff0c;比如你在qq上&#xff0c;和别人发送消息&#xff0c;这个消息肯定是先通过输入设备进行输入&#xf…

Vue3学习 Day03

标签的ref属性 用ref标记dom元素 取代了用id来标识标签&#xff0c;因为用id来标识标签&#xff0c;如果父组件和子组件中有id一样的&#xff0c;会引起混淆。 用ref标记组件 子组件 向父亲暴露name&#xff0c;age&#xff0c;classroom&#xff08;非响应式&#xff09; …

make/Makefile -基本使用

文章目录 一、make/Makefile 的认识makeMakefile 二、make/Makefile 基本使用创建项目清理项目make 指令的使用 三、makefile 的几个语法关键字 PHONY :$ :变量 : 四、makefile的语法推导过程 一、make/Makefile 的认识 我们一般使用 Visual Studio&#xff08;下面简称 VS&am…

【秋招笔试题】米小游的植树工

解法&#xff1a;若区间覆盖的最小值大于等于2&#xff0c;则有他没他没影响&#xff0c;反之则不能算。所以一开始差分数组预处理区间加&#xff0c;然后ST表查最小值即可。 package com.sky;import java.util.Scanner; import java.util.Arrays;public class Test1 {static …

代码随想录——合并区间(Leetcode hot14)

题目链接 思路&#xff1a; 合并区间分为两种情况&#xff1a; 前一个数组右边界 > 后一个数组左边界 eg:[1,3],[2,6] > 合并为[1,6]前一个数组右边界 > 后一个数组右边界 eg:[1,6],[2,4] > 合并为[1,6] class Solution {public int[][] merge(int[][] intervals)…

XSS小游戏(题目+解析)DOM破坏!!!

文章目录 一、Ma Spaghet!二、Jefff三、Ugandan Knuckles四、Ricardo Milos五、Ah Thats Hawt六、Ligma七、Mafia方法一&#xff1a;可以用匿名函数来试试方法二&#xff1a;利用toString方法方法三&#xff1a;利用location和hash切片slice 八、Ok, Boomer九、svg十、DOM破坏十…

【Qt】QWidget的focusPolicy属性

QWidget的focusPolicy属性 设置控件获取到焦点的策略。 所谓“焦点”&#xff0c;就是能选中这个元素。 计算机中的“焦点”&#xff0c;对于键盘操作非常明显。 例如&#xff1a;界面上有一个输入框&#xff0c;此时必须要选中这个输入框&#xff0c;接下来键盘按键才会输入到…

数学建模预测类—【非线性回归】

每日格言&#xff1a;赞美那已经失去的&#xff0c;好让回忆变得可爱 前言 本篇我们将会从一般非线性回归求解和多项式回归求解两个方面来具体介绍如何进行建模求解 一、一般非线性回归求解 1、配曲线求解 适用条件&#xff1a;六类基本曲线&#xff1a;倒指数函数曲线&#…

解决docker一直出现“=> ERROR [internal] load metadata for docker.io/library/xxx“的问题

思考了一下&#xff0c;应该是权限的问题&#xff0c;尝试使用密码登录docker&#xff0c;发现还是不行&#xff0c;因为我是在windows搭建了docker hub&#xff0c;所以可能是需要登录才可以下载&#xff0c;其实就是去生成一个令牌&#xff0c;然后登录即可。 登录即可&#…

单调栈《数组模拟》

#include <iostream>using namespace std;const int N 100010;int m; int stk[N], tt;int main() {cin >> m;while (m -- ){string op;int x;cin >> op;if (op "push"){cin >> x;stk[ tt] x;//插入x}else if (op "pop") tt -…

Tmagic-editor低代码底层拖拽库Moveable示例学习

在前面咱们的自研低代码海报制作平台学习分享计划中分享了自己开发的基本拖拽组件&#xff0c;也只是做了最简单的基本实现。真要写产品&#xff0c;更多还是依赖相关的开源优秀库。 文章目录 参考基本拖拽基本缩放基本Scalable基本旋转基于原点的拖拽和旋转关于练习源码 参考 …

谐振功率放大器的基本原理

1LC谐振电路 谐振又称“共振”。振荡系统在周期性外力作用下&#xff0c;当外力作用频率与系统固有振荡频率相同或很接近时&#xff0c;振幅急剧增大的现象。产生谐振时的频率称“谐振频率”。 电工技术中&#xff0c;振荡电路的共振现象&#xff1a; 1&#xff09;电感与电…