JAVA面试数据库篇
目录
一.优化
1.MYSQL中,如何定位慢查询?
2.SQL语句执行慢,如何分析呢?
3.索引
了解过索引吗?(什么是索引)
索引的底层数据结构了解过吗?
B树和B+树的区别是什么呢?
什么是聚簇索引什么是非聚簇索引?/什么是聚集索引,什么是二级索引(非聚集索引)?什么是回表?
知道什么叫覆盖索引吗?
MYSQL超大分页怎么处理?
索引创建原则有哪些?
什么情况下索引会失效?
一.优化
1.MYSQL中,如何定位慢查询?
-
聚合查询
-
多表查询
-
表数据量过大查询
-
深度分页查询
表象:页面加载过慢、接口压测响应时间过长(超过1s)
方案一:开源工具
-
调试工具:Arthas
-
运维工具:Prometheus、Skywalking(查看接口的执行情况、时间)
方案二:MySQL自带慢日志
慢查询日志记录了所有执行超过指定参数(long_querey_time,单位秒,默认10秒)的所有SQL语句日志。
-
若要开启慢查询日志,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:
#开启慢查询日志查询开关 slow_query_log=1 #设置慢日志的时间为2秒,SQL语句超过两秒,就会记录慢日志 long_query_time=2
配置完成后,重启mysql服务器测试,可以通过查询Localhost-slow.log文件查看语句执行信息。
回答:
曾经在测试接口的时候发现非常慢,压测的结果大概在5秒左右;
我们系统中当时采用了运维工具(skywalking),可以检测出哪个接口,最终因为是sql的问题;
在Mysql中开启了慢日志查询,我们设置的时间是2秒,一旦sql超过2秒就会记录到日志中(调试阶段)。
2.SQL语句执行慢,如何分析呢?
根据上面的几种查询方式,可以使用MySQL自带的分析工具DESC或EXPLAIN来分析。
-
通过key和key_len(即sql实际命中的索引以及索引占用的大小)检查是否命中了索引(即索引本身是否失效)
-
通过type字段查看sql是否有进一步的优化空间,是否存在全索引扫描或全盘扫描(即index和all)
-
通过extra建议判断,是否出现了回表情况(using index condition),如果出现了,可以尝试添加索引或修改返回字段来回复。
3.索引
了解过索引吗?(什么是索引)
-
索引是帮助MySQL高效获取数据的有序数据结构
-
索引能提高数据检索的效率,降低数据库的IO成本(不需要全表扫描)
-
通过索引对数据进行排序,降低数据排序的成本,降低了CPU的消耗
索引的底层数据结构了解过吗?
MySQL的搜索引擎也就是InnoDB引擎默认采取的是B+树的结构存储索引
-
一方面,它的阶数更多,路径更短(B树是5阶,每个节点最多存储4个Key)
-
另一方面,B+树的磁盘读写代价更低,非叶子节点只存储指针,叶子节点存储数据
-
最后一点,B+树便于扫库和区间查询,叶子节点是一个双向链表
B树和B+树的区别是什么呢?
-
第一:在B树中,非叶子节点和叶子节点都会存放数据,而B+树的所有的数据都会出现在叶子节点,在查询的时候,B+树查找效率更加稳定
-
第二:在进行范围查询的时候,B+树效率更高,因为B+树都在叶子节点存储,并且叶子节点是一个双向链表
什么是聚簇索引什么是非聚簇索引?/什么是聚集索引,什么是二级索引(非聚集索引)?什么是回表?
-
聚簇索引数据与索引放到一块,B+树里的叶子节点里保存整行的数据,有且只有一个,一般都是表的主键
-
二级索引是数据与索引分开存储,B+树的叶子节点里保存对应的主键,可以有多个
回表是指通过二级索引找到对应的主键,再根据主键通过聚集索引找到整行数据。
知道什么叫覆盖索引吗?
覆盖索引是指返回的列被查询的索引全部包含。
-
比如典型的根据主键id查询就是覆盖索引,叶子节点包含了整行数据
-
同时我们应该避免返回的列需要创建索引,因为这样可能会触发回表,降低效率,所以应当避免使用select *
MYSQL超大分页怎么处理?
MySQL超大分页一般出现在使用limit语句对大量数据进行处理和排序,越到后面,查询效率越低。
我们可以通过覆盖索引+子查询来提高查询效率。
具体的做法是先根据id查询作为子查询的结果,再和原表根据id联查,因为id查询是覆盖索引,所以效率会快很多。
原语句:select * from user limit 9000000,10; 优化:selct * form user u,(select id from user order by id limit 9000000,10) t where u.id=t.id
索引创建原则有哪些?
-
当数据量比较大,查询比较频繁的表,适合建立索引(超过10万)
-
经常作为查询条件、排序、分组的字段
-
字段内容区分度高
-
内容长,使用前缀索引
-
尽量使用联合索引
-
控制索引的数量
-
如果索引列不能存储NULL值,请在创建表时使用NOT NULL约束
嗯,这个情况有很多,不过都有一个大前提,就是表中的数据要超过10万以上,我们才会创建索引,并且添加索引的字段是查询比较频繁的字段,一般也是像作为查询条件,排序字段或分组的字段这些。 还有就是,我们通常创建索引的时候都是使用复合索引来创建,一条sgl的返回值,尽量使用覆盖索引,如果字段的区分度不高的话,我们也会把它放在组合索引后面的字段。如果某一个字段的内容较长,我们会考虑使用前缀索引来使用,当然并不是所有的字段都要添加索引,这个索引的数量也要控制,因为添加索引也会导致新增改的速度变慢。
什么情况下索引会失效?
索引失效的情况有很多,可以说一些自己遇到过的,不要张口就得得得说一堆背诵好的面试题适当的思考一下,回想一下,更真实)
当使用联合索引的时候
-
违反最左前缀法则
-
或者使用%开头进行模糊查询
-
或者字符串没加单引号,此时发生了类型转换
-
或者对索引列进行运算操作,比如substring
-
或者在范围查询右侧的列
嗯,这个情况比较多,我说一些自己的经验,以前遇到过的
比如,索引在使用的时候没有遵循最左匹配法则,第二个是,模糊查询,如果%号在前面也会导致索引失效。如果在添加索引的字段上进行了运算操作或者类型转换也都会导致索引失效。
我们之前还遇到过一个就是,如果使用了复合索引,中间使用了范围查询,右边的条件索引也会失效所以,通常情况下,想要判断出这条sql是否有索引失效的情况,可以使用explain执行计划来分析
相关文章:
JAVA面试数据库篇
目录 一.优化 1.MYSQL中,如何定位慢查询? 2.SQL语句执行慢,如何分析呢? 3.索引 了解过索引吗?(什么是索引) 索引的底层数据结构了解过吗? B树和B树的区别是什么呢? 什么是聚…...

Android高手进阶教程(三)之----Android 中自定义View的应用.
大家好我们今天的教程是在Android 教程中自定义View 的学习,对于初学着来说,他们习惯了Android 传统的页面布局方式,如下代码: <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"htt…...
第一百一十三回 dart中的getter/setter方法
文章目录 概念介绍使用方法示例代码使用扩展 我们在上一章回中介绍了 flutter_screenutil包相关的内容,本章回中将介绍 dart中的setter/getter方法.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里介绍的setter/getter方法属于编程语言中的…...

搭建Docker环境
目录 一、docker环境搭建 1、卸载旧版本docker 2、安装依赖和设置仓库 3、安装docker 4、启动并加入开机启动 5、验证是否安装成功 二、利用docker搭建nginx 1、拉取镜像 2、启动容器,部署nginx 一、docker环境搭建 1、卸载旧版本docker yum remove docke…...

微服务08-多级缓存
1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: •请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈 •Redis缓存失效时,会对数据库产生冲击 多级缓存就是充分利用请求处理的每个环节,分…...

Intel汇编和ATT汇编的区别?
一、前缀不同 在 Intel 语法中,没有寄存器前缀或立即前缀。 然而,在 AT&T 中,寄存器的前缀是“%”,而 immed 的前缀是“$”。 Intel 语法十六进制或二进制即时数据分别带有“h”和“b”后缀。 此外,如果第一个十六…...

MongoDB 备份与恢复
1.1 MongoDB的常用命令 mongoexport / mongoimport mongodump / mongorestore 有以上两组命令在备份与恢复中进行使用。 1.1.1 导出工具mongoexport Mongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,…...

探讨uniapp的网络通信问题
uni-app 中有很多原生的 API,其中我们经常会用到的肯定有:uni.request(OBJECT) method 有效值 注意:method有效值必须大写,每个平台支持的method有效值不同,详细见下表。 success 返回参数说明 data 数据说明 最终…...

【左神算法刷题班】第18节:汉诺塔问题、岛屿问题、最大路径和问题
第18节 题目1:汉诺塔问题(变体) 体系学习班18节有讲暴力递归的汉诺塔原题。 给定一个数组arr,长度为N,arr中的值只有1,2,3三种 arr[i] 1,代表汉诺塔问题中,从上往下第…...

网络安全体系架构介绍
网络安全体系是一项复杂的系统工程,需要把安全组织体系、安全技术体系和安全管理体系等手段进行有机融合,构建一体化的整体安全屏障。针对网络安全防护,美国曾提出多个网络安全体系模型和架构,其中比较经典的包括PDRR模型、P2DR模…...

JSP实训项目设计报告—MVC简易购物商城
JSP实训项目设计报告—MVC简易购物商城 文章目录 JSP实训项目设计报告—MVC简易购物商城设计目的设计要求设计思路系统要求单点登录模块商品展示模块购物车展示模块 概要设计Model层View层Controller层 详细设计Model层View层登录界面系统主界面 Controller层 系统运行效果项目…...

41、可靠传输——停等ARQ
前面两节内容我们学习了传输层的基本概况的一些知识,包括传输层在TCP/IP协议栈中负责的任务、传输层的两大协议,以及端口号、套接字等一些基本的概念。从这一节开始,我们将开启两大协议中TCP协议的学习。 但是,经过之前的学习&am…...
RK3568 cmake编译
一.简介 CMake是开源、跨平台的构建工具,可以让我们通过编写简单的配置文件去生成本地的Makefile,这个配置文件是独立于运行平台和编译器的,这样就不用亲自去编写Makefile了,而且配置文件可以直接拿到其它平台上使用,…...

详细安装配置django
安装配置使用Django。 1,下载安装 django pip install django 2.创建设置项目 先进入要放置项目的文件夹下 2.1, 创建项目 django-admin startproject Api_project 2.2, 创建app命令 cd Api_project dir看一下是否有 manage.py 文件…...

HTTP之cookie基础学习
目录 Cookie 什么是Cookie Cookie分类 Cookie版本 Cookie工作原理 Cookie详解 创建cookie cookie编码 cookie过期时间选项 Cookie流程 Cookie使用 会话管理 个性化信息 记录用户的行为 Cookie属性 domain选项 path选项 secure选项 cookie…...
观察者模式和发布订阅模式
观察者模式与发布订阅模式的区别: 1、观察者模式中只有观察者和被观察者,发布订阅模式中有发布者、订阅者、调度中心 2、观察者模式是被观察者发生变化时自己通知观察者,发布订阅模式是通过调度中心来进行分布订阅操作 发布订阅模式 class …...

利用ViewModel和LiveData进行数据管理
利用ViewModel和LiveData进行数据管理 1. 引言 在当今移动应用开发的世界中,数据管理是一个至关重要的方面。随着应用的复杂性不断增加,需要有效地管理和维护应用中的数据。无论是从服务器获取数据、本地数据库存储还是用户界面的状态,数据…...

前后端分离------后端创建笔记(05)用户列表查询接口(下)
本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论,如有侵权请联系 源码:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/…...
浅谈GIS和三维GIS的区别?
GIS(地理信息系统)和三维GIS(3D地理信息系统)是地理信息领域的两个重要概念,它们在地理数据的处理和分析方面具有不同的特点和应用。可能很多人分不清二者的区别,本文就带大家简单了解一下二者的区别。 定义…...

ArcGIS Maps SDK for JavaScript系列之三:在Vue3中使用ArcGIS API加载三维地球
目录 SceneView类的常用属性SceneView类的常用方法vue3中使用SceneView类创建三维地球项目准备引入ArcGIS API创建Vue组件在OnMounted中调用初始化函数initArcGisMap创建Camera对象Camera的常用属性Camera的常用方法 要在Vue 3中使用ArcGIS API for JavaScript加载和展示三维地…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...

多模态大语言模型arxiv论文略读(110)
CoVLA: Comprehensive Vision-Language-Action Dataset for Autonomous Driving ➡️ 论文标题:CoVLA: Comprehensive Vision-Language-Action Dataset for Autonomous Driving ➡️ 论文作者:Hidehisa Arai, Keita Miwa, Kento Sasaki, Yu Yamaguchi, …...