java mysql八股

  1. mysql中如何定位慢查询
    表象:页面加载过慢、接口压测响应时间较长(超过1秒)
    可以采用开源工具如Arthas以及Skywalking,使用skywalking可以检测出哪个接口过慢。同时可以在mysql中开启慢日志查询,设置值为2秒,一旦sql执行超过2秒就记录到日志中(调试阶段)。

  2. 一条sql执行的很慢,应该如何分析?
    可以采用EXPLAIN或者DESC命令获取MySQL如何执行select语句的信息,直接在select语句前加上expla/desc。其中的possible-key表示当前sql可能会用到的索引,key表示当前sql实际命中的索引,key-len表示索引占用的大小。extra表示额外的建议。
    通过key和key-len检查是否命中了索引
    通过type字段查看sql是否由进一步的优化空间,是否存在全索引扫描或全盘扫描。(index:索引树扫描/all:全盘扫描)
    通过extra判断是否出现了回表的情况,如果出现了,可以尝试添加索引或者修改返回字段来修复。

  3. 什么是索引?
    索引是MySQL中高效获取数据的数据结构(有序)主要用来提高数据检索的效率,降低数据库的IO成本同时降低数据排序的成本,也降低了CPU的消耗

  4. 索引的底层数据结构?
    MySQL默认的存储引擎InnoDB采用的是B+树来存储索引。采用B+树的原因是:第一阶数更多,路径更短,第二个磁盘读写代价更低,非叶子节点只存储指针,叶子节点存储数据。第三是B+树便于扫库和区间查询,因为它的叶子节点是双向链表。

  5. B树和B+树什么区别?
    第一:B树中,非叶子节点和叶子节点都放数据,而B+树只在叶子节点存放数据,查询时,B+树效率更加稳定
    第二:在进行范围查询时,B+树效率更高,因为B+树都在叶子节点存储,并且叶子节点是双向链表。

  6. 什么是聚簇索引?什么是非聚簇索引?
    聚簇索引是指将数据存储与索引放到了一块,索引结构的叶子节点保存了一整行的数据(必须有且只有一个)
    非聚簇索引(二级索引)是将数据和索引分开存储,索引结构的叶子节点关联的是对应数据的主键(可以存在多个)
    一般我们自己定义的都是非聚簇索引

  7. 什么是回表查询?
    回表的意思就是通过二级索引(非聚簇索引)找到对应的主键值,然后再通过主键值找到聚簇索引中对应的整行数据

  8. 什么是覆盖索引?
    覆盖索引是指查询使用了索引,并且需要返回的列,在该索引中已经全部被找到。就是通过聚簇索引或者非聚簇索引一次直接命中查询的数据,没有触发回表查询。所以我们要尽量避免使用select*,尽量在返回的列中都包含添加索引的字段。

  9. MySQL中超大分页怎么处理?
    超大分页一般都是在数据量比较大的时候,我们使用limit进行分页查询,并且需要对数据进行排序,这个时候效率就很低。可以使用覆盖索引来解决。通过覆盖索引+子查询。先分页查询数据的id字段,确定了id之后再通过子查询来过滤,只查询这个id列表中的数据就可以了。

  10. 索引创建的原则有哪些?
    表中数据超过10w以上通常才会创建索引,并且添加索引的字段是查询比较频繁的字段,一般也是像作为查询条件、排序字段或分组的字段这些。
    通常创建索引使用联合索引来创建,一条sql的返回值,尽量使用覆盖索引。
    如果一个字段内容较长,我们会考虑使用前缀索引。但索引并不是越多越好,需要控制索引的数量,添加索引也会导致增删改查的速度变慢。

  11. 什么情况下索引会失效?
    索引在使用的时候没有遵守最左匹配法则。(查询从索引的最左前列开始,并且不跳过索引中的列,如果违反则失效,如果跳过,则只有最左列索引生效)
    模糊查询时,如果%号在前面也会导致索引失效
    如果在添加索引的字段上进行了运算操作或者类型转换,索引也会失效。
    字符串不加单引号,也会导致索引失效
    通常情况下,想判断这条sql是否有索引失效的情况,可以使用explain执行计划来分析。

  12. 谈一谈你对sql优化的经验
    建表的时候,使用索引、sql语句的编写、主从复制、读写分离。数据量过大的时候考虑分库分表。
    建表的时候,定义字段的时候需要结合字段的内容来选择合适的类型,如果是数值,像tinyint、int、bigint这些类型,要根据实际情况选择。如果是字符串类型,也是结合存储的内容来选择char、varchar、text类型。
    使用索引的时候,比如select语句一定要指明字段名称,不能直接使用select*,还要注意sql语句避免造成索引失效的写法。
    如果数据库的使用场景读的操作比较多的时候,为了避免写的操作锁造成的性能影响,可以采用读写分离的架构。读写分离解决的是,数据库的写入,影响了查询的效率。

  13. 事务的特性是什么?
    事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,或者同时失败(ACID)
    原子性、一致性、隔离性、持久性
    在这里插入图片描述

  14. 并发事务带来哪些问题?
    多个事务并发进行是经常发生的,并发也是必然的。
    第一个是脏读:当一个事务正在访问数据并对数据进行了修改,而这种修改还没有提交到数据库,这时另一个事务也访问了这个数据,因为这个数据是还没有提交的数据,所以另一个事务读到的数据就是脏数据,
    第二个是不可重复读:比如在一个事务内多次读同一数据,在这个事务还没有结束的时候,另一个事务也访问了这个数据,那么,在第一个事务中的两次读数据之间,由于第二个事务的修改导致第一个事务两次读取的数据可能不太一样。这就发生了在一个事务内两次督导的数据是不一样的情况,因此称为不可重复度。
    第三个是幻读:它发生在一个事务读取了几行数据,接着另一个并发事务插入了一些数据。在之后的查询中,第一个事务就会发现多了一些原本不存在的记录,就像发生了幻觉一样。

  15. 如何解决并发事务带来的问题,MySQL的默认隔离级别是什么?
    我们可以通过对事务进行隔离来解决这些问题。
    MySQL中支持四种隔离级别
    第一个是未提交读:它解决不了脏读、不可重复读、幻读,平常也不用
    第二个是读已提交:他能解决脏读
    第三个是可重复读:可以解决脏读和不可重复读,但不能解决幻读(MySQL默认)
    第四个是串行化:都可以解决,但性能太低。
    一般都是使用可重复读(MySQL的默认隔离级别)

  16. undo log和redo log的区别?
    redo log日志记录的是数据页的物理变化,服务宕机可以用来同步数据
    undo log日志主要记录的是逻辑日志,当事务回滚时,通过逆操作恢复原来的数据
    redo log保证了事务的持久性
    undo log保证了事务的原子性和一致性

  17. 事务中的隔离性是如何保证的?
    通过锁和mvcc来实现的。mvcc就是多版本并发控制,指维护一个数据的多个版本,使得读写操作没有冲突,底层实现主要分三个部分,第一个是隐藏字段,第二个是undo log日志,第三个是readView读视图。
    隐藏字段是指:在mysql中给每个表都设置了隐藏字段,有一个是trx_id(事
    务id),记录每一次操作的事务id,是自增的;另一个字段是roll_pointer(回
    滚指针)
    ,指向上一个版本的事务版本记录地址。
    undo log主要的作用是记录回滚日志,存储老版本数据,在内部会形成一个
    版本链,在多个事务并行操作某一行记录,记录不同事务修改数据的版本,
    通过roll_pointer指针形成一个链表
    readView解决的是一个事务查询选择版本的问题,在内部定义了一些匹配规
    则和当前的一些事务id判断该访问那个版本的数据
    ,不同的隔离级别快照读
    是不一样的,最终的访问的结果不一样。如果是rc隔离级别,每一次执行快
    照读时生成ReadView
    ,如果是rr隔离级别仅在事务中第一次执行快照读时生
    成ReadView,后续复用

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

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

相关文章

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的行人车辆检测与计数(Python+PySide6界面+训练代码)

摘要:开发行人车辆检测与计数系统对于提升城市交通管理和监控系统的效率至关重要。本篇博客详细介绍了如何利用深度学习构建一个行人车辆检测与计数系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并结合了YOLOv7、YOLOv6、YOLOv5…

[Java 探索者之路] 一个大厂都在用的分布式任务调度平台

分布式任务调度平台是一种能够在分布式计算环境中调度和管理任务的系统,在此环境下,各个任务可以在独立的节点上运行。它有助于提升资源利用率,增强系统扩展性以及提高系统对错误的容忍度。 文章目录 1. 分布式任务调度平台1. 基本概念1.1 任…

Linux文本处理三剑客:sed

在Linux操作系统中,grep、sed、awk被称为文本操作“三剑客”,上一期中,我们将详细介绍grep的基本使用方法,希望能够帮助到有需要的朋友,现在,我们继续学习sed。 我会参考官方文档来做翻译理解。下面正式开…

使用Java同步Linux服务器时间

前言 公司客户线上服务器采用的是UOS系统&#xff0c;实施发现系统不会同步时间&#xff0c;并且时间有真实时间有偏差&#xff0c;本意想安装NTP授时服务&#xff0c;结果发现UOS安装NTP都要折腾好久&#xff0c;遂采用Java来曲线救国了。 添加依赖 <dependency><…

Java基于SpringBoot的旅游网站的设计与实现论文

目 录 摘 要 2 Abstract 3 1.1 课题开发的背景 4 1.2 课题研究的意义 4 1.3 研究内容 5 第二章 系统开发关键技术 6 2.1 JSP技术介绍 6 2.2 JAVA简介 6 2.3 MyEclipse开发环境 7 2.4 Tomcat服务器 7 2.5 Spring Boot框架 7 2.6 MySQL数据库 8 第三章 系统分析 9 3.1 系统可行性…

实践航拍小目标检测,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建无人机航拍场景下的小目标检测识别分析系统

关于无人机相关的场景在我们之前的博文也有一些比较早期的实践&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《deepLabV3Plus实现无人机航拍目标分割识别系统》 《基于目标检测的无人机航拍场景下小目标检测实践》 《助力环保河道水质监测&#xff0c;基于yolov…

使用 llama.cpp 在本地部署 AI 大模型的一次尝试

对于刚刚落下帷幕的2023年,人们曾经给予其高度评价——AIGC元年。随着 ChatGPT 的火爆出圈,大语言模型、AI 生成内容、多模态、提示词、量化…等等名词开始相继频频出现在人们的视野当中,而在这场足以引发第四次工业革命的技术浪潮里,人们对于人工智能的态度,正从一开始的…

JVM(5)

垃圾回收相关 垃圾收集器 警告:纯八股文! 如果说上面我们讲的收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体体现. 垃圾收集器的作用:垃圾收集器是为了保证程序能够正常,持久运行的一种技术,它是将程序中不用的死亡对象也就是垃圾对象进行清除,从而保证新的…

第四十五天| 322. 零钱兑换、279.完全平方数

Leetcode 322. 零钱兑换 题目链接&#xff1a;322 零钱兑换 题干&#xff1a;给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能…

AI大语言模型【成像光谱遥感技术】ChatGPT应用指南

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本文重点介绍ChatGPT在遥感中的应用&#xff0c;人工智能…

vscode + git

写在前面&#xff1a; origin分支&#xff1a; 当我们在使用git clone的时候&#xff0c;git会自动地将这个远程的repo命名为origin&#xff0c;拉取它所有的数据之后&#xff0c;创建一个指向它master的指针&#xff0c;命名为origin/master&#xff0c;之后会在本地创建一个…

C#单向链表实现:用泛型类在当前位置插入新数据的方法Insert()

一、涉及到的知识点 1.ListNode<T>类 ListNode<T>是一个泛型类&#xff0c;用于表示链表中的一个节点。Value和Next属性是ListNode<T>最基本的属性&#xff0c;用于表示节点的值和指向下一个节点的引用。但是&#xff0c;完全可以根据实际需求添加其他属性&…

双非二本找实习前的准备day5

学习目标&#xff1a; 每天2-3到简单sql&#xff08;刷完即止&#xff09;&#xff0c;每天复习代码随想录上的题目3道算法&#xff08;时间充足可以继续&#xff09;&#xff0c;今天的八股背少一点&#xff0c;MySQL和Redis各1-2道好了&#xff0c;主攻复习是java基础 今日…

C语言5道编程题简单介绍(三)

1、打印杨辉三角 程序分析&#xff1a; 结构如下所示&#xff1a; 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1代码如下&#xff1a; #include <stdio.h>int main() {int i,j;int a[10][10];printf("\n");for(i0;i<10;i) {a[i][0]1;a…

Vuex 是什么?它在 Vue 应用中扮演什么角色?解释一下 Vuex 的状态管理模式。如何在 Vuex 中进行异步操作?

一、Vuex 是什么&#xff1f; Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 的出现解决了多个组件间共享状态的问题&#xff0c;使得状态管理变得更加直…

#WEB前端(HTML属性)

1.实验&#xff1a;a,img 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; a: href插入超链接 默认情况下在本窗口打开链接, target可以设置打开的窗口,parent在父窗口打开&#xff0c;blank新开串口打开,top在顶层串口打开,self为默认在本窗口打开 img: 插入图片 可以插…

解析/区分MOS管的三个引脚G、S、D(NMOS管和PMOS管)

MOS管的三个引脚分别是Gate&#xff08;栅极&#xff09;、Source&#xff08;源极&#xff09;和Drain&#xff08;漏极&#xff09;。以下是详细介绍&#xff1a; Gate&#xff08;栅极&#xff09;。这是控制MOS管开关的关键引脚&#xff0c;用于控制电流的流通。Source&…

智能分析网关V4安全帽检测/反光衣检测/通用工服检测算法及应用

TSINGSEE青犀视频智能分析网关V4内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。硬件管理平台支持RTSP、GB28181协议、以及厂家私有协议接入&#xff0c;可兼容市面上常…

【DDD】学习笔记-实体和值对象:从领域模型的基础单元看系统设计

今天我们来学习 DDD 战术设计中的两个重要概念&#xff1a;实体和值对象。 这两个概念都是领域模型中的领域对象。它们在领域模型中起什么作用&#xff0c;战术设计时如何将它们映射到代码和数据模型中去&#xff1f;就是我们这一讲重点要关注的问题。 另外&#xff0c;在战略…

springboot238光影视频

光影视频平台 摘 要 使用旧方法对光影视频平台的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在光影视频平台的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开…