JAVA面试专题-MySQL

全局锁

对这个数据库实例加锁,加锁后整个实例处于只读状态,DDL和DML阻塞,DQL可以

表级锁

每次操作锁住整张表

表锁

表共享读锁(read lock):不阻塞其他客户端的读,但会阻塞写

表独占写锁(write lock):阻塞其他客户端的读写

元数据锁(meta data lock MDL)

如果某一个表存在活动事务,不可以对元数据写入操作,当对一张表进行增删改查的时候,加读锁,当对表结构进行变更操作的时候,加写锁

read和write兼容,和exclusive不兼容

意向锁

意向共享锁(IS):与read兼容,和write排斥
意向排他锁(IX):与read和write互斥,意向锁之间不会互斥

行级锁

每次操作锁住对应的行数据,发生锁冲突的概率最低,并发度最高

行锁

锁定单行记录,防止其他事务对此进行update和delete,RC和RR都支持

共享锁S:允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁

排他锁X:运行获取排他锁的事务更新数据,阻止其他事务获得相同数据集的共享锁和排他锁

1. 针对唯一索引进行检索时,对已存在的记录进行等值匹配,将会自动优化为行锁
2. InnoDB的行锁针对索引加的锁,不通过索引条件检索数据,将会升级为表锁

间隙锁

间隙锁:锁定索引记录间隙,确保索引记录间隙不变,防止其他事物在这个间隙进行insert,产生幻读,RR支持

临键锁

临键锁:行锁和间隙锁组合,同时锁住数据和数据前面的间隙,RR支持

SQL优化

如何定位慢查询

常见的慢查询有聚合查询,多表查询,表数据量过大查询,深度分页查询

方案一:开源工具 Skywalking

方案二:MySQL慢查询日志,在MySQL的配置文件开启开关和时间

如何定位慢查询

使用explain或者desc获取MySQL语句信息

possible_keys 当前sql可能会用到的索引
key 当前sql实际命中的索引
key_len 索引占用的大小
extra 额外的优化建议 using where/index 使用索引并且没回表查询 using index condition 使用索引但是回表查询
type         system:查询系统中的表;const:主键查询; eq_ref:主键索引查询或唯一索引查询
                        ref:索引查询;range:范围查询;index:索引树扫描;all:全盘扫描

MySQL支持的存储引擎有哪些,什么区别?

InnoDB

特点:事务外键行级锁

索引

索引:帮助MySQL高效获取数据的数据结构,提高数据检索效率,降低数据库IO成本,通过索引列对数据进行排序,降低数据排序成本,降低了cpu的消耗。

B树与B+树对比:
        磁盘读写代价b+树更低:非叶子节点只存储指针,只有叶子结点存储数据
        查询效率B+树更稳定:阶数更多,路径更短
        B+树便于扫库和区间查询:叶子结点是一个双向链表

 聚簇索引和非聚簇索引

聚簇索引(聚集索引):将数据存储与索引放到了一块,索引结构的叶子结点保存了行数据,有且仅有一个。
非聚簇索引(非聚集索引,二级索引):将数据与索引分开存储,索引结构的叶子结点关联对应的主键,可以存在多个

聚簇索引选取规则:
        存在主键,主键索引就是聚簇索引
        不存在主键,第一个唯一索引就是聚簇索引
        都没有,InnoDB会自动生成一个rowid作为隐藏的聚簇索引

回表查询

回表查询:通过二级索引找到对应的主键值,到聚集索引中查找整行数据,就是回表

覆盖索引

查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到。

MySQL超大分页处理

数据量较大时,如果进行limit分页查询,在查询时,越往后,分页查询效率越低

优化思路:覆盖索引+子查询:先分页查询id字段,再用子查询来过滤

索引创建原则

1. 数据量较大,且查询比较频繁的表
2. 常作为条件查询、排序、分组的字段
3. 尽量使用联合索引,避免回表
4. 要控制索引的数量
5. 尽量选择区分度高的列作为索引
6. 如果所以不能存储null,要用非空约束
7. 字段名称过长可以使用前缀

索引失效

1. 违反最左前缀法则:如果索引了多列,要遵守最左前缀法则:查询从索引的最左前列开始,并且不能跳过索引中的列,匹配最左前缀法则,走索引。如果符合最左法则,但是出现跳跃某一列,只有最左列索引生效
2. 如果一个索引使用了范围查询,其右面的索引不生效
3. 在索引列上运算操作,索引将失效
4. 字符串不加单引号,索引失效
5. 模糊查询如果有头部匹配,索引失效

SQL优化经验

表设计优化

设置合适的数值,根据实际情况选择

SQL语句优化

避免使用select * 
SQL语句要避免索引失效
尽量使用union all
避免在where字句中进行表达式操作
尽量使用inner join,内连接会对两个表优化,优先把小表放在外面

主从复制,读写分离

事务相关

事务特性ACID

原子性:事务是不可分割的最小操作单元,要么全部成功,要么全部失败
一致性:事务完成时,必须所有数据保持一致状态
隔离性:数据库提供隔离机制,保证事务在不受外部并发操作影响的独立环境中运行
持久性:事务一旦提交或者回滚,对数据库的数据改变就是永久的

并发事务问题

 undo log 和 redo log

 缓冲池不断向数据页中同步数据,要处理脏写问题,不断向redo log(重做日志) buffer中写数据,然后同步到磁盘中的redo log file中,但是如果没有异常,依旧是buffer pool 与 数据页进行交换数据。

 回滚日志undo log:用于记录数据被修改前的信息,提供回滚和mvcc,redo log记录物理日志,undo log记录逻辑日志。undolog 可以实现 事务的一致性和与原子性

对于隔离性:可以使用排他锁或者mvcc

MVCC(Multi-Version Concurrency Control)多版本并发控制

维护一个数据的多个版本,使得读写操作没有冲突

隐藏字段:
        db_trx_id:最近修改的事务id,记录插入这条记录或者最后一次修改该记录的事务id
        db_roll_ptr:回滚指针,指向这条记录的上一个版本,配合undo log
        db_row_id:如果没有主键,将会生产该隐藏字段

undo log:
        回滚日志,存储老版本数据
        版本链:多个事务并行操作某一行记录,记录不同事务修改数据的版本,荣光rool ptr形成链表

readView解决实物查询选择版本问题
        根据readView的匹配规则和当前的一些事务id判断访问哪个版本的数据
        不同的隔离级别快照读是不一样的,最终的访问结果不一样:
                RC:每一次执行快照读时生成readview
                RR:仅事务第一次执行快照读时生产readview,后续复用 

主从同步

核心是二进制日志binlog

       1. master提交事务时,会将事务变更记录在二进制文件binlog中
       2. 从库读取binlog,写到从库的中继日志relay log中
       3. slave重做中继日志中的时间,改变自己的数据

分库分表

垂直拆分

 水平拆分

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kubectl_入门_Pod调整

Pod调度 在默认情况下,一个pod在哪个node节点上运行,是由scheduler组件采用相应的算法计算出来的,这个过程是不受人工控制的。 但是在实际过程中,这并不满足需求,因为很多情况下,我们想控制某些pod到达某…

第9篇:创建Nios II工程之读取Switch的值<二>

Q:上一期我们完成了Quartus硬件工程部分,本期我们创建Nios II软件工程这部分。 A:创建完BSP和Nios II Application之后,在source文件main.c中添加代码:system.h头文件中新增了Switch PIO IP的硬件信息,包括…

【学习笔记三十】EWM和PP集成的后台配置和前台演示

一、EWM和PP集成概述 在S4HANA版本中,PP模块强化了生产线的概念,并与EWM集成,使用生产供应区(PSA)的功能。PSA的基本配置包括在ERP系统中创建PSA、定义工作中心、将PSA分配给工作中心、在EWM中创建PSA、匹配ERP和EWM中…

实验14 MVC

二、实验项目内容&#xff08;实验题目&#xff09; 编写代码&#xff0c;掌握MVC的用法。【参考课本 例1 】 三、源代码以及执行结果截图&#xff1a; example7_1.jsp&#xff1a; <% page contentType"text/html" %> <% page pageEncoding "ut…

宝兰德以全栈智能运维能力为企业数字化转型保驾护航

2020年发布“十四五”规划中提出“加快数字化发展&#xff0c;建设数字中国”&#xff0c;发展数字经济成为国家战略。在数字技术创新应用和国家政策持续利好的大趋势下&#xff0c;面对全行业产业结构调整、资源环境挑战等带来的机遇和难点&#xff0c;我国千行百业的数字化转…

工业互联网通讯协议—欧姆龙(Fins tcp)

一、场景 近期公司要对欧姆龙CP系列设备的数据采集&#xff0c;于是就研究了下欧姆龙的Fins Tcp协议。 二、Fins Tcp 组成字节说明固定头446494E53 FINS对应的ASCII码的十六进制长度4后面剩余指令的长度命令4 握手固定为&#xff1a;00000000 读写固定为&#xff1a;0000000…

CentOS/Anolis的Linux系统如何通过VNC登录远程桌面?

综述 需要在server端启动vncserver&#xff0c;推荐tigervnc的server 然后再本地点来启动client进行访问&#xff0c;访问方式是IPport&#xff08;本质是传递数据包到某个ip的某个port&#xff09; 然后需要防火墙开启端口 服务器上&#xff1a;安装和启动服务 安装服务 y…

Python 可以对数据进行哪些可视化?

Python 可视化 一、条形图&#xff08;或柱状图&#xff09; 1.代码如下&#xff1a; import matplotlib.pyplot as plt import pandas as pddf pd.DataFrame({County:[America,Canada,Australia,Germany,French,China],GDP:[80,30,70,80,60,75] })plt.bar(df[County],df[G…

聊聊 ASP.NET Core 中间件(一):一个简单的中间件例子

前言&#xff1a;什么是中间件 服务器在收到 HTTP 请求后会对用户的请求进行一系列的处理&#xff0c;比如检查请求的身份验证信息、处理请求报文头、检查是否存在对应的服务器端响应缓存、找到和请求对应的控制器类中的操作方法等&#xff0c;当控制器类中的操作方法执行完成…

国家开放大学2024年春《Matlab语言及其应用》实验一熟悉Matlab 操作环境参考答案

实验报告 姓名&#xff1a; 学号&#xff1a; 实验一名称&#xff1a;熟悉 Matlab 操作环境 实验目标&#xff1a;通过简单变量和矩阵的录入、计算和查看相关信息&#xff0c;了解 Matlab 操作界面 及各子窗口使用方法。熟悉一系列便于使用的 Matlab 函数和文件的工具。 实…

Oracle索引组织表与大对象平滑迁移至OceanBase的实施方案

作者简介&#xff1a;严军(花名吉远)&#xff0c;十年以上专注于数据库存储领域&#xff0c;精通Oracle、Mysql、OceanBase&#xff0c;对大数据、分布式、高并发、高性能、高可用有丰富的经验。主导过蚂蚁集团核心系统数据库升级&#xff0c;数据库LDC单元化多活项目&#xff…

Qt简单离线音乐播放器

有上传本地音乐文件&#xff0c;播放&#xff0c;暂停&#xff0c;拖拉进度条等功能的播放器。 mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include <QMediaPlayer> #include <QFileDialog> #include <QTime&g…

c4d动画代渲染怎么报价?动画代渲染平台(含云渲染农场)

在C4D动画代渲染的报价问题时&#xff0c;需要考虑多个因素&#xff0c;如动画复杂度、渲染时长、所需技术以及市场行情等。动画代渲染平台作为专门提供专业渲染服务的机构&#xff0c;其报价通常会根据客户的具体需求和项目特点来定制。下面一起来看看相关内容吧。 一、c4d动画…

【docker】Spring Boot3.x 打包 Docker容器

Docker化Spring Boot应用 创建文件夹 demo mkdir democd demo创建Dockerfile # 两个 openjdk 二选一 #FROM openjdk:17-jre-alpineFROM eclipse-temurin:17MAINTAINER chengxuyuanshitang <chengxuyuanshitangXX.com>RUN mkdir -p /workspace/java/demoCOPY demo.ja…

nginx+Tomcat动静分离

本⽂的动静分离主要是通过nginxtomcat来实现&#xff0c;其中nginx处理图⽚、html等静态的⽂ 件&#xff0c;tomcat处理jsp、do等动态⽂件. 实验环境 192.168.200.133 nginx反向代理 192.168.200.129 static 192.168.200.130 dynamic 步骤 修改三台主机名 [rootadmin ~]#…

专注 APT 攻击与防御—sql server 常用操作远程桌面语句

SqlServer 常用操作远程桌面语句 1、是否开启远程桌面 1&#xff1a;表示关闭0&#xff1a;表示开启 EXEC master..xp_regread HKEY_LOCAL_MACHINE,SYSTEM\CurrentControlSet\Control\Terminal Server,fDenyTSConnections 2、读取远程桌面端口 EXEC master..xp_regread HKE…

LabVIEW飞机机电系统综合测试平台

LabVIEW飞机机电系统综合测试平台 在现代航空领域&#xff0c;机电系统的准确性与可靠性对飞行安全至关重要。针对飞机机电管理计算机&#xff08;UMC&#xff09;复杂度增加、测试覆盖率低、效率不高等问题&#xff0c;开发了一套基于LabVIEW的机电系统综合测试平台。平台通过…

1天搞定uniApp+Vue3+vite+Element UI或者Element Plus开发学习,使用vite构建管理项目,HBuilderX做为开发者工具

我们通常给小程序或者app开发后台时&#xff0c;不可避免的要用到可视化的数据管理后台&#xff0c;而vue和Element是我们目前比较主流的开发管理后台的主流搭配。所以今天石头哥就带大家来一起学习下vue3和Element plus的开发。 准备工作 1&#xff0c;下载HBuilderX 开发者…

qt嵌入并控制外部程序

一、流程 1、调用Window接口模拟鼠标&#xff0c;键盘事件 POINT point; LPPOINT lpppoint &point; GetCursorPos(lpppoint);//获取鼠标位置 SetCursorPos(point.x, point.y);//设置鼠标位置//鼠标左键按下 mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, poi…

Stm32CubeMX 为 stm32mp135d 添加 spi

Stm32CubeMX 为 stm32mp135d 添加 spi 一、启用设备1. spi 设备添加2. spi 引脚配置2. spi 时钟配置 二、 生成代码1. optee 配置 spi 时钟和安全验证2. linux spi 设备 dts 配置 bringup 可参考&#xff1a;Stm32CubeMX 生成设备树 一、启用设备 1. spi 设备添加 选中spi设…