Java面试必问题29:MySQL篇(重点必问)

  1. 数据库的ACID特性
  1. 原子性(Atomicity):事务中的操作要么全部成功,要么全部失败。事务是一个不可分割的单元,要么全部执行,要么全部回滚。如果事务中的任何操作失败,所有操作都将被回滚到事务开始之前的状态,以保证数据的一致性。
  2. 一致性(Consistency):事务的执行应使数据库从一个一致性状态转移到另一个一致性状态。在事务开始和结束时,数据库的完整性约束应得到满足,确保数据的正确性和一致性。
  3. 隔离性(Isolation):每个事务在执行过程中都应该与其他事务隔离。并发事务的执行应当互不干扰,每个事务应该感知不到其他事务的存在或并发执行。隔离级别定义了不同事务之间的可见性和互相影响的程度。
  4. 持久性(Durability):一旦事务提交成功,其对数据库的修改应该永久保存,即使系统发生故障或重启,也应该能够保持数据的持久性。

最简回答:ACID特性是指原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),用于保证数据库事务的可靠性和一致性。

  1. MySQL存储引擎

MySQL默认是Innodb存储引擎,适合比较庞大的应用场景

  1. InnoDB:MySql 5.6 版本默认的存储引擎。InnoDB 是一个事务安全的存储引擎,它具备提交、回滚以及崩溃恢复的功能以保护用户数据。InnoDB 的行级别锁定以及 Oracle 风格的一致性无锁读提升了它的多用户并发数以及性能。InnoDB 将用户数据存储在聚集索引中以减少基于主键的普通查询所带来的 I/O 开销。为了保证数据的完整性,InnoDB 还支持外键约束。
  2. MyISAM:MyISAM既不支持事务、也不支持外键、其优势是访问速度快,但是表级别的锁定限制了它在读写负载方面的性能,因此它经常应用于只读或者以读为主的数据场景。

最简回答:InnoDB是MySQL的默认存储引擎,支持事务处理、行级锁和外键;而MyISAM不支持事务、只有表级锁,并且不支持外键。

  1. 数据库的事务隔离级别

SQL 标准定义了四个隔离级别:

    • READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
    • READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
    • REPEATABLE-READ(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生
    • SERIALIZABLE(可串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读

隔离级别

脏读

不可重复读

幻读

READ-UNCOMMITTED

READ-COMMITTED

×

REPEATABLE-READ

×

×

SERIALIZABLE

×

×

×

事务隔离级别越严格,数据库效率越低。MySQL默认的事务隔离级别是:REPEATABLE-READ可重复读级别,简称RR级别,会出现幻读问题。

最简回答:数据库事务隔离级别是指在多个并发事务同时执行时,各个事务之间的隔离程度,常见的隔离级别有读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。

  1. 索引会失效的情况有哪些

下面列举几种不走索引的 SQL 语句:

  1. 索引列参与表达式计算:
  1. SELECT 'sname' FROM 'stu' WHERE 'age' + 10 = 30;
  1. 函数运算:
  1. SELECT 'sname' FROM 'stu' WHERE LEFT('date',4) < 1990;
  1. %词语%–模糊查询:
  1. SELECT * FROM 'manong' WHERE `uname` LIKE '码农%' -- 走索引
  2. SELECT * FROM 'manong' WHERE `uname` LIKE '%码农%' -- 不走索引

  1. 字符串与数字比较不走索引:
  1. CREATE TABLE 'a' ('a' char(10));
  2. EXPLAIN SELECT * FROM 'a' WHERE 'a'="1" — 走索引
  3. EXPLAIN SELECT * FROM 'a'WHERE 'a'=1 — 不走索引,同样也是使用了函数运算
  1. 查询条件中有 or ,即使其中有条件带索引也不会使用。换言之,就是要求使用的所有字段,都必须建立索引:
  1. select * from dept where dname='xxx' or loc='xx' or deptno = 45;
  1. 正则表达式不使用索引。

  1. MySQL索引底层原理

MySQL的索引底层结构是B+树。

B+树是一种平衡多路搜索树,具有以下特点:

1. 所有关键字保存在叶子节点,并且叶子节点之间通过链表连接,形成一个有序的叶子节点序列。

2. 非叶子节点只存储索引字段的值和子节点的指针,不保存实际的数据。这样可以使得一个节点可以存储更多的关键字,减少了树的高度,加快搜索速度。

3. 叶子节点包含所有索引字段的值和指向对应数据的指针。

在B+树索引中,每个节点的大小是固定的,与磁盘页的大小相当。节点的大小通常是数据库页的大小,例如16KB或32KB。每个节点可以存储多个关键字和指针。叶子节点的关键字是有序的,且通过链表连接在一起。

索引查询快的原因有以下几点:

1. 路径长度短:B+树具有平衡性,所有叶子节点的深度相同,因此在查询过程中只需要沿着树的高度进行几次磁盘I/O操作,所以查询速度较快。

2. 顺序访问优势:B+树的叶子节点之间使用链表连接,并且叶子节点的关键字是有序的,因此对于范围查询操作,可以通过顺序扫描叶子节点来获取有序的数据结果,提高查询速度。

3. 最小化磁盘I/O操作:B+树具有较高的填充因子,每个磁盘页上存储的关键字数量较多,能够减少磁盘I/O操作的次数,提高查询效率。

综上所述,B+树的平衡性、有序的叶子节点、顺序访问以及最小化的磁盘I/O操作是使得索引查询快速的关键因素。通过B+树的数据结构和索引的建立,可以大幅度减少磁盘访问次数,提高数据库查询的效率。

最简回答:MySQL索引底层原理使用了B+树数据结构,它是一种平衡树,能快速定位和检索数据;B+树的叶子节点存储实际数据,中间节点存储索引,通过减少磁盘IO来提高查询效率;索引按照值的大小顺序排列,使得范围查询效率更高。

  1. MySQL优化方案
    • 服务器优化(增加CPU、内存、网络、更换高性能磁盘)
    • 表设计优化(字段长度控制、添加必要的索引)
    • SQL优化(避免SQL命中不到索引的情况)
    • 架构部署优化(一主多从集群部署)
    • 编码优化实现读写分离

  1. SQL优化方案

1. 优化查询条件

   使用索引:确保所有涉及到的列都有适当的索引。

  1.    SELECT * FROM table WHERE column = 'value';
  2.    CREATE INDEX idx_column ON table(column);

   避免模糊查询:%开头的通配符会使索引失效,尽量避免在查询条件中使用以%开头的LIKE语句。

  1. SELECT * FROM table WHERE column LIKE 'value%';

2. 使用合适的数据类型

   使用最小可能的数据类型:选择最合适的数据类型,不要使用比实际需要更大的数据类型。

  1.   CREATE TABLE example (column1 INT, column2 VARCHAR(50));

   避免使用存储过大的数据类型:避免使用TEXT、BLOB等存储过大的数据类型,因为它们会占用更多的存储空间和I/O操作。

3. 减少查询次数

   使用JOIN查询:通过优化JOIN语句,避免使用多个单表查询。

  1. SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id;

  使用批量操作:合并多个相似的操作为一个更大的操作,减少多次查询和事务提交。

  1. INSERT INTO table (column1, column2) VALUES (value1, value2), (value3, value4), ...;

4. 优化索引

 检查索引使用情况:通过EXPLAIN或其他性能分析工具,检查查询是否使用了适当的索引。

  1.    EXPLAIN SELECT * FROM table WHERE column = 'value';

   - 删除不必要的索引:移除未使用或被其他索引覆盖的冗余索引,减少索引维护的开销。

5. 避免使用SELECT *

 明确列出所需的列:只选择需要的列,避免不必要的数据传输和处理。

  1. SELECT column1, column2 FROM table;

  1. 如何设计数据库表
  1. 数据库设计规范
    • 根据业务模块拆分数据库(业务模块垂直分库)
    • 同一业务模块的表在一个数据库里
  2. 表设计规范
    • 表名、字段名全部小写英文带下划线
    • 字段类型长度根据实际需求选择
    • 设计基础字段(主外键ID、时间、逻辑删除、版本)
    • 添加必要冗余字段
    • 添加必要索引(常用于查询的单字段或组合索引),单表索引建议控制在5个以内
    • 规划分表(单表超500万行或容量超2G才分表)

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

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

相关文章

计算机网络:数据链路层 - CSMA/CD协议

计算机网络&#xff1a;数据链路层 - CSMA/CD协议 媒体接入控制CSMA/CD协议截断二进制指数退避算法帧长与帧间间隔信道利用率 媒体接入控制 如图所示&#xff0c;这是一根同轴电缆&#xff0c;有多台主机连接到这根同轴电缆上&#xff0c;他们共享这根传输媒体&#xff0c;形成…

【随笔】Git 高级篇 -- 整理提交记录(下)rebase(十六)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

蓝桥杯刷题-15-异或和之和-拆位+贡献法⭐⭐(⊙o⊙)

蓝桥杯2023年第十四届省赛真题-异或和之和 题目描述 给定一个数组 Ai&#xff0c;分别求其每个子段的异或和&#xff0c;并求出它们的和。或者说&#xff0c;对于每组满足 1 ≤ L ≤ R ≤ n 的 L, R &#xff0c;求出数组中第 L 至第 R 个元素的异或和。然后输出每组 L, R 得到…

MySQL5.7导入MySQL8.0以上版本的几种错误

【错误原因1】/!40000 DROP DATABASE IF EXISTS springbootra863/; 【解决办法】给这一行删了

阿里通义千问开源 320 亿参数模型;文字和音频自动翻译成手语Hand Talk拉近人与人的距离

✨ 1: Qwen1.5-32B Qwen1.5-32B是Qwen1.5系列中性能与效率兼顾的最新语言模型&#xff0c;内存占用低&#xff0c;运行速度快。 Qwen1.5-32B是Qwen1.5语言模型系列的最新成员&#xff0c;这个模型是基于先进的技术研发的&#xff0c;旨在提供一种既高效又经济的AI语言理解和生…

CAXA实体设计教程 网盘下载

CAXA实体设计教程 网盘下载 https://pan.baidu.com/s/1tOIoWmAwl8Wepu7iFsKB_A?pwd2024 章节&#xff1a; 第一章 CAXA3D实体设计入门基础概述 &#xff08;150分钟&#xff09; 第二章 CAXA3D实体设计二维草图 &#xff08;230分钟&#xff09; 第三章 CAXA实体设计 特征生成…

OpenHarmony实战:瑞芯微RK3568移植案例

本文章是基于瑞芯微RK3568芯片的DAYU200开发板&#xff0c;进行标准系统相关功能的移植&#xff0c;主要包括产品配置添加&#xff0c;内核启动、升级&#xff0c;音频ADM化&#xff0c;Camera&#xff0c;TP&#xff0c;LCD&#xff0c;WIFI&#xff0c;BT&#xff0c;vibrato…

基于springboot实现在线教育平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现在线教育平台系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了微服务在线教育系统的开发全过程。通过分析微服务在线教育系统管理的不足&#xff0c;创建了一个计算机管理微服务在线…

CASA模型教程

原文链接&#xff1a;CASA&#xff08;Carnegie-Ames-Stanford Approach&#xff09;模型教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247600635&idx6&sna655a8de570edcaa435d6e917b66d9b3&chksmfa82081ccdf5810a33a778e8771bb116bde9e5a1f795da…

IRIS / Chronicles 数据结构备忘录

数据结构的内容主要涉及到索引和全局变量。 这部分的内容的问题在于概念多&#xff0c;和普通的数据库对应的内容也不太一样&#xff0c;需要花点时间了解。 networked items 有关英文的解释是&#xff1a; Networked items that point to databases that use padded-string…

Map接口及其实现类及常用方法

1.Map接口及其实现类 java.util.Map : 存储一对一对的数据(key-value键值对)|----->HashMap : 主要实现类,线程不安全,效率高,可以添加null的键值对;底层使用数组单向链表红黑树。|------->LinkedHashMap : 是HashMap的子类,在HashMap的数据结构的基础上,添加了一对双向…

读博做FPGA上的AI加速能不能搞啊?

从企业的角度来看&#xff0c;选择在FPGA上进行AI加速仍然有其一定的优势和适用场景&#xff0c;但也有一些挑战需要考虑。我这里有一套嵌入式入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习嵌入式&#xff0c;不妨点个关注&#xff0c;给…

【经典算法】LCR187:破冰游戏(约瑟夫问题,Java/C/Python3/JavaScript实现含注释说明,Easy)

目录 题目思路及实现方式一&#xff1a;迭代模拟&#xff08;用链表模拟这个游戏&#xff09;思路代码实现Java版本C语言版本Python3版本 复杂度分析 方式二&#xff1a;数学迭代思路代码实现Java版本C语言版本Python3版本 复杂度分析 方式三&#xff1a;递归思路代码实现Java版…

【CSS疑难点汇总】1.bor-box失效情况总结以及高宽设置为auto的情况

1. box-sizing box-sizing是改变盒子宽高的计算方式&#xff0c;一般使用bor-box&#xff0c;消除padding和border对整个盒子的影响&#xff0c;但在没有明确给出宽高的情况下&#xff0c;box-sizing是没有效果的 1.1 box-sizing不生效的情况 1.1.1块级盒子嵌套 ​ 宽度继承…

(一)基于IDEA的JAVA基础12

一维数组 为什么使用数组: 当我们需要存储一系列数据的时候&#xff0c;就需要用到数组&#xff0c;如果不使用数组&#xff0c;我们就要需要一个一个的去声明变量&#xff0c;这样浪费内存空间&#xff0c;同时效率低下。 什么是数组: 数组本身就是一个变量&#xff0c;只…

(3)(3.1) 英特尔Realsense深度摄像头(二)

文章目录 前言 5 配置ArduPilot 6 地面测试&#xff1a;飞行前验证 7 飞行测试 8 实验 9 数据闪存记录 前言 本文介绍如何将英特尔 Realsense 深度摄像头(Intel Realsense Depth Camera)与 ArduPilot 配合使用&#xff0c;以实现避障(obstacle avoidance)。该方法使用在…

javaScript手写专题——实现instanceof/call/apply/bind/new的过程/继承方式

目录 原型链相关 手写instanceof 实现一个_instance方法&#xff0c;判断对象obj是否是target的实例 测试 手写new的过程 实现一个myNew方法&#xff0c;接收一个构造函数以及构造函数的参数&#xff0c;返回构造函数创建的实例对象 测试myNew方法 手写类的继承 ES6&…

照顾宝贝的双眼:新生儿大小眼关爱手册

引言&#xff1a; 宝宝的眼睛是他们认知世界的窗户&#xff0c;眼睛的健康至关重要。大小眼&#xff0c;即一只眼睛比另一只眼睛大或小&#xff0c;是新生儿时期可能出现的一种眼部异常。尽管在新生儿中相对较少见&#xff0c;但家长们仍然需要了解如何正确照顾宝宝的大小眼&am…

计算机视觉之三维重建(7)---多视图几何(下)

文章目录 一、透视结构恢复问题1.1 概述1.2 透视结构恢复歧义1.3 代数方法1.4 捆绑调整 二、P3P问题三、随机采样一致性 一、透视结构恢复问题 1.1 概述 1. 透视结构恢复问题&#xff1a;摄像机为透视相机&#xff0c;内外参数均未知。 2. 问题&#xff1a;已知 n n n 个三维…

蓝桥杯每日一题:n-皇后问题(回溯)

n−皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上&#xff0c;使得皇后不能相互攻击到&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n&#xff0c;请你输出所有的满足条件的棋子摆法。 输入格式 共一行&#xff0c;包含整数 n。 输出…