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

面试八股文--数据库基础知识总结(3)MySQL优化

目录

1、慢查询

Q1:在mysql中如何定位慢查询?

Q2:SQL语句执行很慢,如何分析?

2、索引

 Q3:什么是索引?

Q4:什么是聚簇索引和非聚簇索引?

Q5:什么是回表查询?

Q6:什么是覆盖索引?

 Q7:索引创建的原则有哪些?

Q8:什么情况下索引会失效

3、优化 

Q9:SQL优化的经验

4、事务

Q10:undo log和redo log的区别?

Q11:事务的隔离性是如何保证的呢?


1、慢查询

Q1:在mysql中如何定位慢查询?

慢查询表现为页面加载过慢、接口响应时间过长

  • 开源工具:如Skywalking
  • MySQL自带慢日志:记录了执行时间超过指定参数的SQL语句

Q2:SQL语句执行很慢,如何分析?

使用SQL的EXPLAIN语句

EXPLAIN SELECT * FROM `j_user_role` WHERE id=12

 type字段性能由好到坏:NULL、system、const(根据主键查询)、eq_ref(主键索引查询或唯一索引查询)、range(范围查询)、index(索引树扫描)、all(全盘扫描 select *)

key字段代表是否命中了索引,索引的名称

2、索引

 Q3:什么是索引?

索引(index)是帮助MySQL高效获取数据的数据结构。MySQL的索引底层实现是B+树,原因分析可以看我的另一篇博客:面试八股文--数据库基础知识总结(2) MySQL_dbms-CSDN博客

Q4:什么是聚簇索引和非聚簇索引?

聚簇索引:将数据存储与索引放到一块,索引结构的叶子节点保存了行数据(必须要、且只有一个!一般就是主键

非聚簇索引(二级索引):将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键(可以有多个) 

Q5:什么是回表查询?

先通过二级索引找到对应的主键,再通过聚簇索引找到对应的数据,这个过程就是回表查询。

Q6:什么是覆盖索引?

是指查询使用了索引,并且需要返回的列在该索引中已经全部能找到。(触发了回表查询就不是覆盖索引了)

举个例子: id是主键,name也有索引

-- 是覆盖索引,因为数据在索引中能找到
SELECT * FROM `table` WHERE id=1
-- 是覆盖索引,因为name在索引中能找到
SELECT name FROM `table` WHERE name='Alice'
-- 不是覆盖索引,因为gender在name索引中找不到
SELECT name,gender FROM `table` WHERE name='Alice'

 Q7:索引创建的原则有哪些?

  • 针对数据量较大,且查询比较频繁的表建立索引
  • 表中的某一字段常作为查询条件、排序、分组操作的
  • 尽量选择区分度高的列作为索引
  • 进来使用联合索引、减少单列索引
  • 要控制索引的数量,索引越多维护索引的代价也越大
  • 如果数据列不能存储NULL时,最好在创建表时使用NOT NULL约束

Q8:什么情况下索引会失效

 (1)违反最左前缀法则

索引了多列,要从索引的最左前列开始,并且不跳过索引中的列。(也就是说,联合索引中查询只能从最左到最右,跳过就会失效)

(2)范围查询右边的列,索引失效

例如一个联合索引有name、status、address三个,当查询 name='value', status>'value', address='value'时,address的索引会失效,因为status使用了范围查询

(3)索引列上进行运算操作,索引失效(例如求字串、求平均)

(4)字符串不加单引号,索引会失效(发生了类型转换)

(5)模糊查询有可能导致索引失效

name=‘%aaa’或者name=‘%aaa%’会失效,而name=‘aaa%’则不会

3、优化 

Q9:SQL优化的经验

(1)表的设计优化:比如设置合适的类型

(2)索引的优化:如Q7、Q8

(3)SQL语句优化

  • select知名字段名称,尽量避免select *
  • 尽量避免索引失效
  • 使用union all代替union,因为union会多一次过滤操作
  • 避免在where中对字段进行表达式操作
  • Join优化,能用inner join就不用left join、right jion

(4)主从复制、读写分离

4、事务

Q10:undo log和redo log的区别?

  • redo log:记录了事务提交时数据页的物理修改,用来实现事务的持久性。主要用在刷新脏页到磁盘,发生错误时,进行数据恢复使用。
  • undo log:回滚日志。记录数据被修改前的信息,作用有:提供回滚和MVCC。undo log记录的是逻辑日志
  • redo log保证事务的持久性,undo log保证事务的原子性和一致性

Q11:事务的隔离性是如何保证的呢?

(1)锁:加入排他锁

(2)MVCC(多版本并发控制):指维护一个数据的多个版本,使得读写操作没有冲突。

MVCC的实现原理:记录中的隐藏字段(事务id和回滚指针)、undo log(回滚日志、版本链)、readview

ReadView(读视图)是读快照SQL执行时MVCC提取数据的依据。

  • 当前读:读取的是记录的最新版本
  • 快照读:读取的记录数据的可见版本(不加锁)

这个就导致了在不同事务隔离级别下读取数据的不同,在RC级别下,每次操作都会生成一个ReadView,因此可能导致“不可重复读问题”;而在RR隔离级别下,仅对事务中第一次执行快照时生成ReadView,后续复用该ReadView


 都看到这里了,给个小心心♥呗~

相关文章:

面试八股文--数据库基础知识总结(3)MySQL优化

目录 1、慢查询 Q1:在mysql中如何定位慢查询? Q2:SQL语句执行很慢,如何分析? 2、索引 Q3:什么是索引? Q4:什么是聚簇索引和非聚簇索引? Q5:什么是回表查…...

汇编前置知识学习 第11-13天

今天要做什么? 1:虚拟机准备环境 2:virtualBox 创建虚拟硬盘,配置bochs文件启动 一: VMDK(VMWare 虚拟机) VDI(VirtualBox虚拟机) VHD(virtual-PC/Hyper-V 虚拟机)…...

springboot在业务层校验对象/集合中字段是否符合要求

springboot在业务层校验对象参数是否必填 1.场景说明2.代码实现 1.场景说明 为什么不在控制层使用Validated或者Valid注解直接进行校验呢?例如通过excel导入数据,将excel数据转为实体类集合后,校验集合中属性是否符合要求。 2.代码实现 定义…...

python二级考试中会考到的第三方库

在 Python 二级考试中,可能会涉及一些常用的第三方库。这些库可以帮助考生更好地理解和应用 Python 编程。以下是一些在 Python 二级考试中可能会用到的第三方库及其简要介绍:1. requests 用途:用于发送 HTTP 请求。安装:pip install requests示例代码:import requestsres…...

Linux中死锁问题的探讨

在 Linux 中,死锁(Deadlock) 是指多个进程或线程因为竞争资源而相互等待,导致所有相关进程或线程都无法继续执行的状态。死锁是一种严重的系统问题,会导致系统资源浪费,甚至系统崩溃。 死锁的定义 死锁是指…...

【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.3.1 避免频繁更新(Update by Query的代价)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 Elasticsearch数据更新与删除深度解析:2.3.1 避免频繁更新(Update by Query的代价)案例背景1. Update by Query的内部机制解析1.1 文档更…...

【Python项目】基于Python的书籍售卖系统

【Python项目】基于Python的书籍售卖系统 技术简介:采用Python技术、MYSQL数据库等实现。 系统简介:书籍售卖系统是一个基于B/S结构的在线图书销售平台,主要分为前台和后台两部分。前台系统功能模块分为(1)用户中心模…...

spring boot + vue 搭建环境

参考文档:https://blog.csdn.net/weixin_44215249/article/details/117376417?fromshareblogdetail&sharetypeblogdetail&sharerId117376417&sharereferPC&sharesourceqxpapt&sharefromfrom_link. spring boot vue 搭建环境 一、浏览器二、jd…...

Linux下的shell指令(一)

作业 1> 在终端提示输入一个成绩,通过shell判断该成绩的等级 [90,100] : A [80, 90) : B [70, 80) : C [60, 70) : D [0, 60) : 不及格 #!/bin/bash read -p "请输入学生成绩:" score if [ "$score" -ge 90 ] && [ "$scor…...

JS禁止web页面调试

前言 由于前端在页面渲染的过程中 会调用很多后端的接口,而有些接口是不希望别人看到的,所以前端调用后端接口的行为动作就需要做一个隐藏。 禁用右键菜单 document.oncontextmenu function() {console.log("禁用右键菜单");return false;…...

GIt分支合并

分支 1: C0 → C1 → C2 → C3(最新) 分支 2: C0 → C4 → C5 → C6(最新)1. 找到共同父节点 C0 Git 会先找出 branch1 和 branch2 的共同祖先节点 C0。这通常借助 git merge-base 命令达成,虽然在日常使用 git merge…...

Sqli-labs

1.搭建【前提是已经下载安装好phpstudy_pro】 1.1源码准备 1.1.1源码下载 这里从github下载 https://codeload.github.com/Audi-1/sqli-labs/zip/masterhttps://codeload.github.com/Audi-1/sqli-labs/zip/master 1.1.2下载的靶场源码放到WWW下 将刚才下载的压缩包解压到…...

unreal engine gameplay abiliity 获取ability的cooldown剩余时间

unreal engine gameplay abiliity 获取ability的cooldown 版本 5.4.4 参考 测试代码 if (HasAuthority() && AbilitySystemComponent){TArray<FGameplayAbilitySpecHandle> OutAbilityHandles;AbilitySystemComponent->GetAllAbilities(OutAbilityHandles…...

【GenBI优化】提升text2sql准确率:建议使用推理大模型,增加重试

引言 Text-to-SQL(文本转 SQL)是自然语言处理(NLP)领域的一项重要任务,旨在将自然语言问题自动转换为可在数据库上执行的 SQL 查询语句。这项技术在智能助手、数据分析工具、商业智能(BI)平台等领域具有广泛的应用前景,能够极大地降低数据查询和分析的门槛,让非技术用…...

【六祎 - Note】SQL备忘录;DDL,DML,DQL,DCL

SQL备忘录 from to : 点击访问源地址...

高频 SQL 50 题(基础版)_1341. 电影评分

高频 SQL 50 题&#xff08;基础版&#xff09;_1341. 电影评分 思路 思路 (select Users.name results from Users left join MovieRating on Users.user_id MovieRating.user_id group by(Users.name) order by count(MovieRating.movie_id) desc,Users.name asc limit 1) u…...

JavaScript 变量命名规范

在编写JavaScript代码时&#xff0c;选择合适的变量名对于代码的清晰度、可读性和可维护性至关重要。一个良好的变量命名规范不仅能帮助团队成员更好地理解代码意图&#xff0c;还能减少错误发生的可能性。本文将介绍一些广泛接受的JavaScript变量命名规则和最佳实践。 命名的…...

解决 uView-UI和uv-ui 中 u-tabs 组件在微信小程序中出现横向滚动条的问题

问题描述 在微信小程序中使用 uView-UI 的 u-tabs 组件时&#xff0c;用户可能会遇到横向滚动条的问题。这不仅影响了页面的美观&#xff0c;还可能导致用户误操作。 问题原因 该问题的根本原因是未在微信小程序环境下屏蔽滚动条。uView-UI 的 u-tabs 组件默认只在 H5 环境下…...

20250304解决在飞凌的OK3588-C的Linux R4下解决使用gstreamer保存的mp4打不开

sync poweroff rootok3588:/# sync rootok3588:/# sync rootok3588:/# cd 107 rootok3588:/107# ls -l total 0 rootok3588:/107# sync rootok3588:/107# poweroff 20250304解决在飞凌的OK3588-C的Linux R4下解决使用gstreamer保存的mp4打不开 2025/3/4 10:58 缘起&#xff1a…...

build gcc

1&#xff0c;下载源码 wget https://gcc.gnu.org/pub/gcc/infrastructure/mpfr-4.1.0.tar.bz2 wget https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 wget https://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.2.1.tar.gz git clone --mirror https://github…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了&#xff0c;很多小伙伴想体验鸿蒙电脑版操作系统&#xff0c;可惜&#xff0c;鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机&#xff0c;来体验大家心心念念的鸿蒙系统啦&#xff01;注意&#xff1a;虚拟…...

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...

机器学习的数学基础:线性模型

线性模型 线性模型的基本形式为&#xff1a; f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法&#xff0c;得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等&#xff0c;设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…...

云原生时代的系统设计:架构转型的战略支点

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、云原生的崛起&#xff1a;技术趋势与现实需求的交汇 随着企业业务的互联网化、全球化、智能化持续加深&#xff0c;传统的 I…...