MySQL数据库核心面试题
数据库中的引擎
常用的引擎有InnoDB、MyIsam、Memory三种。
MyIsam:组织形式分为三种:
frm文件存储表结构、MyData文件存储表中的数据、MyIndex文件存储表的索引数据。是分开存储的。
Memory:基于内存的,访问速度快,但是后面可能用的都是Redis。
重点来说说InnoDB存储引擎吧:
MySQL默认的存储引擎,DML操作支持事务。一个ibd文件对应一张表嘛。它在一个TableSpace的表空间这样一个逻辑结构中,按大小分为段、区、页这样的。一个段有四个区,一个区有连续64隔数据页,这个数据页就是InnoDB下最基本的数据单位嘛,然后数据页的大小是16K,数据页里面才是你存的这种行记录,它都是往数据页里面放的。
InnoDB有三个特点嘛:支持外键、还有事务、还有行级锁,这是它的几个特点。
它也是一个组织索引表,这一块就跟索引挂钩了嘛,它每个节点就是一个数据页。然后根据组织形式又能分为聚集索引和二级索引嘛,根据不同的这种索引,字段进行组织,排放。
它不仅存放表结构、数据。还会存放该表对应的索引信息。
索引
一种用于提高数据库查询性能的有序的数据结构。通过它呢,数据库引擎可以快速定位到存储表中的特定数据,而不必逐行遍历整个表。

聚集索引和二级索引
在InnoDB存储引擎中,根据索引的存储形式,分为聚集索引(指针)和二级索引(二级指针)
索引结构中,叶子结点存放的是整行的行数据。必须有,且只有一个。
索引结构中,叶子结点存放的是对应的主键。可以有多个。除了聚集索引以外的索引都是二级索引
B+树和B树的结点:
B+树非叶子节点只存储key,不存储值,直到叶子节点才存储值,非叶子节点主要起到索引作用,叶子节点包含了所有插入的元素。
B树每个结点即存值又存key,我们知道,一个数据页大小是16K固定的嘛,如果又存节点又存Key,就会导致每个节点存储的key的个数少,进而导致树的层数很深。这也是不用B树去存储索引的原因。
不用Hash存储索引的原因:
不用Hash,因为我们数据库查询经常会涉及到范围查询嘛,而Hash索引只能做到精确查找,不能进行范围查找,同时Hash不能对数据进行排序操作。
聚集索引选取规则
如果存在主键,主键就是聚集索引。
如果没有设置主键,默认第一个唯一索引就是聚集索引。
如果又没有主键,又没有唯一索引,那么InnoDB会自动生成一个rowid作为隐藏的聚集索引。
对于叶子节点:聚集索引存放的是一行的全部信息,而二级索引存放的是主键值,通常会涉及到回表查询嘛。(然后通过主键值,再回表)
回表查询
先介绍一下聚集索引和二级索引的区别;
就是我们查询条件一般是通过二级索引,这样拿到了主键值,再拿到该主键值,再进行一次回表查询。
覆盖索引
查询使用了索引,同时返回的列,不需要回表查询,即一次查询就能全部找到了。如select id,name from a where name = jack ,这里id是主键值,name是二级索引,通过二级索引查到了id,也就是主键值,不需要回表查询,所以叫做覆盖索引。因此尽量不要使用select *,因为这样往往会做到回表查询,影响查询性能。
索引失效的场景
用到复合(联合)索引的时候,违反最左前缀法则
【查询的时候必须从索引的最左列开始,如果跳过了中间某一列,则跳过之后的索引都失效】
当查询条件有范围查询的时候,其右边的条件,如where id > 1 and xxx 【and后面的索引都会失效】
在索引列上进行运算操作
以%开头的模糊查询
隐式类型转换(如表中数据是字符串类型,而你给他一个int类型,即不加单引号,索引会失效)
索引设计原则
①数据量大,且查询比较频繁的表建立索引,如果一个表全是增删改的操作,就没必要加索引了
②常作为查询条件where、order by、group by操作的字段建立索引,如果一次查询条件的字段为多个,也可以考虑设置联合索引,但记住它们的顺序不能改变,要遵守最左配对原则
③选择区分度高的列作为索引,像性别男女就没必要。
④如果是字符串类型的字段,且长度较长,可以针对字段的特点,建立前缀索引。
⑤尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,避免回表,提高查询效率。
⑥控制索引的数量,索引越多,维护索引结构的代价也越大,会影响增删改的效率
事务
对于单独的DQL(数据查询语句)我们一般不会说去考虑事务,如果是设计到DDL、DML比如insert、update、delete,为了保证操作的原子性,即同时成功或同时失败。因为事务是一个不可分割的单元嘛,并且如果有的成功执行,有的没成功,那就会造成很大的问题,也因此引入了事务的机制。
四大特性:
原子性:保证一个事务中的多条操作语句,要不同时成功,要不同时失败。不会处于中间状态。
一致性:事务执行的结果是使数据库从一个状态变到另一个一致性状态。
隔离性:涉及到不同的隔离机制,数据库中有四种隔离机制,读未提交、读已提交、可重复读、串行化。使得每个事务都独立执行嘛。
持久性:因为数据最终是要落盘的,持久化保存数据嘛。
相关文章:
MySQL数据库核心面试题
数据库中的引擎 常用的引擎有InnoDB、MyIsam、Memory三种。 MyIsam:组织形式分为三种: frm文件存储表结构、MyData文件存储表中的数据、MyIndex文件存储表的索引数据。是分开存储的。 Memory:基于内存的,访问速度快࿰…...
Golang | Leetcode Golang题解之第85题最大矩形
题目: 题解: func maximalRectangle(matrix [][]byte) (ans int) {if len(matrix) 0 {return}m, n : len(matrix), len(matrix[0])left : make([][]int, m)for i, row : range matrix {left[i] make([]int, n)for j, v : range row {if v 0 {continu…...
Linux基础知识面试题
1. 请描述Linux操作系统的安装过程,并说明其中的关键步骤。 Linux操作系统的安装过程通常涉及以下几个关键步骤: 准备安装介质:需要从官网或者其他可靠来源下载Linux发行版的ISO镜像文件,并制作一个启动U盘或者烧录到DVD中。现在…...
中国高分辨率国家土壤信息网格基本属性数据集(2010-2018)
中国高分辨率国家土壤信息网格基本属性数据集(2010-2018) 数据介绍 土壤是人类生存和发展的基础,多个联合国可持续发展目标(SDGs)与土壤资源利用和管理直接相关。然而,全球和我国现有土壤信息大多源于历史土…...
数据仓库项目---Day01
文章目录 框架的安装包数据仓库概念项目需求及架构设计项目需求分析项目框架技术选型系统数据流程设计框架版本选型集群资源规划设计 数据生成模块数据埋点主流埋点方式埋点数据上报时机 服务器和JDK准备搭建三台Linux虚拟机(VMWare)编写集群分发脚本xsyncSSH无密登录配置JDK准…...
若依生成树表和下拉框选择树表结构(在其他页面使用该下拉框输入)
1.数据库表设计 生成树结构的主要列是id列和parent_id列,后者指向他的父级 2.来到前端代码生成器页面 导入你刚刚写出该格式的数据库表 3.点击编辑,来到字段 祖籍列表是为了好找到直接父类,不属于代码生成器方法,需要后台编…...
考研数学|李林《880》做不动,怎么办!?看这一篇!
在考研数学的备考过程中,遇到难题是很常见的情况,尤其是当你尝试解决李林880习题集中的问题时。他以其难度和深度著称,旨在帮助考生深入理解数学分析的复杂概念。 如果你在解题过程中感到困难,这并不是你个人的问题,而…...
paddle ocr 版面分析
教程 https://github.com/PaddlePaddle/PaddleOCR/blob/a4b7d3ba4a8333a23bab1fc1472aa18deec211d1/ppstructure/layout/README_ch.md 额外的模型,但是yolov2的模型缺少yml配置文件,找不到 https://github.com/PaddlePaddle/PaddleOCR/blob/main/ppstruc…...
25. K 个一组翻转链表 - 力扣(LeetCode)
基础知识要求: Java:方法、while循环、for循环、if else语句 Python: 方法、while循环、for循环、if else语句 题目: 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个…...
使用 GPT-4-turbo+Streamlit+wiki+calculator构建Math Agents应用【Step by Step】
💖 Brief:大家好,我是Zeeland。Tags: 大模型创业、LangChain Top Contributor、算法工程师、Promptulate founder、Python开发者。📝 CSDN主页:Zeeland🔥📣 个人说明书:Zeeland&…...
[240514] OpenAI 发布 GPT-4o,人机交互的历史性时刻 | 苹果芯片进军服务器剑指AI | 谷歌大会以AI为主
目录 OpenAI 发布 GPT-4o,人机交互的历史时刻苹果芯片进军服务器,剑指生成式 AI2024年谷歌开发者大会将围绕 AI 展开 OpenAI 发布 GPT-4o,人机交互的历史时刻 OpenAI 发布了 GPT-4o,大家一直都想要现在终于等到的语音助手 : 勿需…...
Maximo 在 Automation Script 中访问数据库
在 Automation Script 中我们通常使用 mbo 对象来操作数据,但有时候当数据量较大时,使用 mbo 对象来操作数据会比较慢。这时候,我们可以使用 JDBC 的方式来直接访问数据库,从而提高操作数据的效率。 下面看看使用 JavaScript 脚本…...
gitee 简易使用 上传文件
Wiki - Gitee.com 官方教程 1.gitee 注册帐号 (直接选择初始化选项即可,无需下载git) 2.下载git 安装 http://git-scm.com/downloads 3. 桌面 鼠标右键 或是开始菜单 open git bash here 输入(复制 ,粘贴) 运行…...
iOS Xcode 升级Xcode15报错: SDK does not contain ‘libarclite
一 iOS Xcode 升级Xcode15报错: SDK does not contain libarclite 1.1 报错信息 SDK does not contain libarclite at the path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/ lib/arc/libarclite_iphonesimulator.a; try increasin…...
即插即用篇 | YOLOv8引入轴向注意力 Axial Attention | 多维变换器中的轴向注意力
本改进已集成到 YOLOv8-Magic 框架。 我们提出了Axial Transformers,这是一个基于自注意力的自回归模型,用于图像和其他组织为高维张量的数据。现有的自回归模型要么因高维数据的计算资源需求过大而受到限制,要么为了减少资源需求而在分布表达性或实现的便捷性上做出妥协。相…...
【芯片制造】【常用术语】CP、FT、WAT
背景: 在我们讲wafer加工好以后,需要进行相关测试,在此阶段,有很多提及到的常用术语,我们依次进行解释。主要单词含义: CP : Chip Probing(probe card),wafer…...
计算机vcruntime140.dll找不到如何修复,分享5种靠谱的修复教程
当您在运行某个应用程序或游戏时遇到提示“找不到vcruntime140.dll”,这通常意味着系统中缺少了Visual C Redistributable for Visual Studio 2015或更高版本的一个重要组件。这个错误通常发生在运行某些程序时,系统无法找到所需的动态链接库文件。小编将…...
超级简单的地图操作工具开发可疑应急,地图画点,画线,画区域,获取地图经纬度等
使用echars的地图画点,画线,画区域,获取地图经纬度等 解压密码:10086007 地图也是用临时的bmap.js和china.js纯离线二选一 一共就这么多文件 画点,画线,画区域 点击地图获取经纬度-打印到控制台,这样就能渲染航迹,多变形,结合其他算法算圆等等操作 下载资源:https://download…...
25_NumPy数组np.round将ndarray舍入为偶数
25_NumPy数组np.round将ndarray舍入为偶数 使用 np.round() 将 NumPy 数组 ndarray 的元素值舍入为任意位数。请注意,0.5 由于舍入到偶数而不是一般舍入而舍入为 0.0。 本文介绍了一般舍入的实现示例。 如何使用 np.round() 基本用法指定要舍入的位数:…...
Java字符串去除空格的方法
前言 在Java编程实践中,处理字符串中的空格是一项基本且频繁的操作。本文将深入探讨如何使用Java原生方法以及Apache Commons Lang库中的StringUtils类,全方位解决字符串去空格的需求,让你的代码更加健壮和高效。 1. Java原生方法 a. trim…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...
比特币:固若金汤的数字堡垒与它的四道防线
第一道防线:机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”(Hashing)就是一种军事级的加密术(SHA-256),能将信函内容(交易细节…...
