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,为了保证操作的原子性,即同时成功或同时失败。因为事务是一个不可分割的单元嘛,并且如果有的成功执行,有的没成功,那就会造成很大的问题,也因此引入了事务的机制。

四大特性:

原子性:保证一个事务中的多条操作语句,要不同时成功,要不同时失败。不会处于中间状态。

一致性:事务执行的结果是使数据库从一个状态变到另一个一致性状态。

隔离性:涉及到不同的隔离机制,数据库中有四种隔离机制,读未提交、读已提交、可重复读、串行化。使得每个事务都独立执行嘛。

持久性:因为数据最终是要落盘的,持久化保存数据嘛。

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

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

相关文章

算法_前缀和

DP34 【模板】前缀和 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别int n in.nextInt(),q in.ne…

JavaFX布局-HBox

JavaFX布局-HBox 常用属性alignmentspacingchildrenmarginpaddinghgrow 实现方式Java实现Xml实现 综合案例 HBox按照水平方向排列其子节点改变窗口大小,不会该部整体布局窗口太小会遮住内部元素,不会产生滚动条 常用属性 alignment 对齐方式 new HBox().setAlign…

RT Thread + CLion环境搭建

RT Thread CLion环境搭建 0.前言一、准备工具1. Env RT Thread v5.12.CLion安装3.编译及下载工具 二、新建Env工程三、CLion配置四、运行测试 0.前言 事情的起因是最近在使用RT Thread Studio时,发现默认的 rtt 内核版本及交叉编译链版本都过于陈旧,于…

《无畏契约》游戏画面出现“撕裂感“,你清楚背后的原理吗?

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (91平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀Java …

信息化总体架构方法_2.信息化工程建设方法

1.信息化架构模式 信息化架构一般有两种模式,一种是数据导向架构,一种是流程导向架构。对于数据导向架构重点是在数据中心,BI商业智能等建设中使用较多,关注数据模型和数据质量;对于流程导向架构,SOA本身就…

黑马程序员鸿蒙HarmonyOS端云一体化开发【13-15】

前置知识:arkts 一套开发工具,一套语言,搞定客户端和云端两个的编写。其中application就是客户端,cloudProgram就是云端。 开发人员->全栈开发工程师,降低了开发成本,且提供了很多现成的云服务&#xf…

AI原生实践:测试用例创作探索

测试用例作为质量保障的核心,影响着研发-测试-发布-上线的全过程,如单元测试用例、手工测试用例、接口自动化用例、UI 自动化用例等,但用例撰写的高成本尤其是自动化用例,导致了用例的可持续积累、更新和迭代受到非常大制约。长久…

【JS面试题】原型原型链

一、面试真题展示: 1. 如何准确判断一个变量是不是数组? ① 使用instanceof进行判断:a instanceof Array ② 使用Array.isArray()进行判断:Array.isArray(a) 2. 手写一个简易的jQuery,考虑插件和扩展性? …

内网工具之LDP的使用

LDP 是微软自带的一款活动目录信息查询工具,在域控的 cmd 窗口执行 ldp 命令即可打开 LDP 工具。普通域成员主机默认是没有 LDP 工具的,可以自行上传ldp.exe 工具上去查询活动目录信息。不在域内的机器,也可以通过上传 ldp.exe 工具上去执行。…

tomcat--目录结构和文件组成

目录结构 目录说明bin服务启动,停止等相关程序和文件conf配置文件lib库目录logs日志记录webapps应用程序,应用部署目录workjsp编译后的结果文件,建议提前预热访问 /usr/local/apache-tomcat-8.5.100/work/Catalina/localhost/ROOT/org/apac…

PingCAP 戴涛:构建面向未来的金融核心系统

作者:戴涛 导读 近日,平凯星辰解决方案技术部总经理戴涛在 2024 数据技术嘉年华活动中,做了主题为“构建面向未来的金融核心系统”的分享,本文为戴涛演讲实录的全文。 文章分析了中国金融行业的发展趋势,并且基于这…

算法提高之加成序列

算法提高之加成序列 核心思想&#xff1a;迭代加深 dfs 从上往下逐渐增大depth 这样下面没有用的方案就不用遍历了 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 110;int n;int path[N];//当前求哪个位置…

PDF编辑阅读器PDF Expert for Mac v3.10.1中文激活版

PDF Expert for Mac是一款易于使用的 PDF 编辑器和注释器&#xff0c;专为 Mac 设备设计。它允许用户轻松查看、编辑、签名、注释和共享 PDF。该软件使用户能够向他们的 PDF 添加文本、图像、链接和形状&#xff0c;突出显示和标记文本&#xff0c;填写表格以及签署数字文档。它…

STL----resize

resize的作用 设置容器元素个数和初始值。 resize和reserve resize即改变容器元素个数&#xff0c;也改变容器容量。 reserve只改变容器容量&#xff0c;不改变容器元素个数。 reserve有什么用 reserve---存储&#xff0c;容量&#xff0c;保留。 1&#xff0c;设置容器容…

Python实现麦克风录音保存到wav

功能展示&#xff1a; 运行环境&#xff1a; Python: 3.10.4 64-bit 操作系统&#xff1a; 截图环境&#xff1a;win10 64-bit 视频录屏环境&#xff1a;win10 64-bit 功能说明&#xff1a; 点击界面开始按钮开始录音&#xff0c;点击停止按钮结束录音。 源码文件列表&…

十二生肖Midjourney绘画大挑战:释放你的创意火花

随着AI艺术逐渐进入大众视野&#xff0c;使用Midjourney绘制十二生肖不仅能够激发我们的想象力&#xff0c;还能让我们与传统文化进行一场新式的对话。在这里&#xff0c;我们会逐一提供给你创意满满的绘画提示词&#xff0c;让你的作品别具一格。而且&#xff0c;我们还精选了…

扫码枪与Input的火花

文章目录 前言一、需求&#xff1a;交互细节二、具体实现两个核心的函数&#xff1a;自动聚焦 三&#xff0c;扩展知识input 与 change的区别 前言 在浏览器扫描条形码获取条形的值&#xff0c;再操作对应的逻辑。这是比较常见的业务&#xff0c;这里记录实际操作。 其中PC端…

2023年国赛高教杯数学建模C题蔬菜类商品的自动定价与补货决策解题全过程文档及程序

2023年国赛高教杯数学建模 C题 蔬菜类商品的自动定价与补货决策 原题再现 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c;大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c;商超通常会根据…

JSON 转为json串后出现 “$ref“

问题描述 转为JSON 串时出现 "$ref":"$.RequestParam.list[0]" $ref&#xff1a; fastjson数据重复的部分会用引用代替&#xff0c;当一个对象包含另一个对象时&#xff0c;fastjson就会把该对象解析成引用 “$ref”:”..” 上一级 “$ref”:”” 当前对…

分布式搜索-elaticsearch基础 安装es

这里是在虚拟机的Linux系统里安装es的教程: 1.创建网络 在Finashell终端输入指令 docker network create es-net 2.将es.tar安装包放入tmp的目录下 输入指令加载镜像&#xff1a;docker load -i es.tar 3.再运行docker 命令 docker run -d \--name es \-e "ES_JAVA_O…