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加载和展示三维地…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
