当前位置: 首页 > 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…...

手把手教你用ROS2和ZED2 SDK搭建3D视觉开发环境(Ubuntu 20.04版)

手把手教你用ROS2和ZED2 SDK搭建3D视觉开发环境&#xff08;Ubuntu 20.04版&#xff09; 在自动驾驶、增强现实和机器人导航等领域&#xff0c;3D视觉感知已成为核心技术之一。ZED2相机凭借其双目深度感知能力和高精度SLAM算法&#xff0c;成为开发者构建空间智能系统的首选传感…...

解锁TikTok电商API:PHP开发者的零门槛接入方案

解锁TikTok电商API&#xff1a;PHP开发者的零门槛接入方案 【免费下载链接】tiktokshop-php Unofficial Tiktok Shop API Client in PHP. Use API version 202309 and later 项目地址: https://gitcode.com/gh_mirrors/ti/tiktokshop-php 跨境电商API对接新选择&#xf…...

探索:空间网格编码SpatialGridCoding在北斗导航与地理实体管理中的应用

1. 空间网格编码&#xff1a;北斗导航的"数字身份证" 想象一下&#xff0c;当你打开手机导航时&#xff0c;系统如何快速锁定你的位置并规划路线&#xff1f;这背后离不开空间网格编码技术的支持。简单来说&#xff0c;空间网格编码就像给地球表面贴满二维码&#xf…...

力扣原题《有效的数独游戏》,纯手搓,已验证

请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#xff09; 注…...

Oracle RAC OCR坏了怎么办?手把手教你用ocrconfig修复与备份(附11g/12c实战命令)

Oracle RAC OCR故障应急指南&#xff1a;从诊断到修复的全链路实战 凌晨三点&#xff0c;当手机铃声划破寂静&#xff0c;作为DBA的你从睡梦中惊醒。电话那头传来运维同事急促的声音&#xff1a;"生产环境RAC集群所有节点突然离线&#xff0c;CRS服务无法启动&#xff01…...

如何在5分钟内将网页SVG完美保存为可编辑矢量文件?

如何在5分钟内将网页SVG完美保存为可编辑矢量文件&#xff1f; 【免费下载链接】svg-crowbar Extracts an SVG node and accompanying styles from an HTML document and allows you to download it all as an SVG file. 项目地址: https://gitcode.com/gh_mirrors/sv/svg-cr…...

Stable-Diffusion-v1-5-archive多分辨率实践:512×512 vs 768×768出图质量与耗时对比

Stable-Diffusion-v1-5-archive多分辨率实践&#xff1a;512512 vs 768768出图质量与耗时对比 你是不是也好奇&#xff0c;用Stable Diffusion出图时&#xff0c;分辨率到底该怎么选&#xff1f;是选经典的512512&#xff0c;还是追求更高清的768768&#xff1f;选高了怕电脑跑…...

注意力机制融合新范式:从GCNet与DANet看全局建模的演进与实战

1. 视觉注意力机制的进化之路 记得我第一次接触视觉注意力机制是在2016年&#xff0c;那时ResNet刚掀起深度学习的新浪潮。当时最让我困惑的是&#xff1a;为什么神经网络需要"注意力"&#xff1f;后来在ImageNet数据集上做实验时才明白&#xff0c;传统CNN就像近视眼…...

2026年AI前20岗位薪酬出炉!搞AI大模型的远超同行?

AI相关&#xff0c;细分技术领域&#xff0c;薪资前20岗位&#xff0c;都有哪些。 今天这篇文章与铁铁们分享一下。 1 薪资榜单 如下图所示&#xff0c;排名第一&#xff1a;深度学习算法工程师&#xff0c;平均月薪达到3万1千&#xff1b; 排名第二的架构师&#xff0c;薪资与…...

FreeRTOS实战指南:从消息队列到内存管理,手把手解决嵌入式多任务难题

FreeRTOS实战指南&#xff1a;从消息队列到内存管理&#xff0c;手把手解决嵌入式多任务难题 1. 为什么嵌入式开发者需要FreeRTOS 在资源受限的嵌入式系统中&#xff0c;开发者常常面临这样的困境&#xff1a;既要处理实时性要求高的传感器数据采集&#xff0c;又要兼顾用户界面…...