MySQL面试题补

内连接和外连接的区别:


○1.功能和用法不同:内连接是连接两表都满足情况的数据;而外连接是以一边的表为主表,另一个表只显示匹配的行;
○2.用途:内连接一般是用于检索不同表需要根据共同的列值进行匹配的;而外连接要保留一个表的数据,其他表需要查询匹配的记录;
○3.性能:内连接的性能要优于外连接;因为内连接处理的记录少;


on、where、having区别

on是用于表连接的筛选条件,实在表进行连接时起作用; where是用于将结果集根据条件进行过滤操作;无法跟随聚合函数,用在将表查询完成之后; having是对分组之后的结果集进行过滤操作,可以使用聚合函数;


什么是笛卡尔积

在数据库中就是连接表是没有连接条件,导致返回的结果集是所有的数据;


链表查询有哪些优化操作注意事项?

1.对于连接条件可以使用合适的索引;

2.可以对查询字段使用索引,尽量不要使用select ,内存放不下;

3.小表驱动大表原理:让数据量较少的表作为驱动表去连接数据量大的表,以减少查询过程中需要扫描的数据量;


MySQL内存缓存:


MySQL内存缓存是一种机制,用于存储查询结果并加速读取操作。通过将完整的查询语句及其结果存储在内存中,MySQL内存缓存可以在下次相同查询请求时直接返回缓存的结果,而不必再次执行查询过程。这样可以减少对磁盘和数据库引擎的访问,提高响应速度和整体性能。
在MySQL中,有两种常见的内存缓存机制:
1.查询缓存(Query Cache):这是MySQL提供的一种内置缓存机制,用于缓存查询结果。当执行一个查询语句时,MySQL会先检查查询缓存中是否有对应的结果。如果有,则直接返回缓存结果;否则,执行查询并将结果存入缓存。查询缓存可以避免多次执行相同查询造成的性能损耗。但请注意,从MySQL 8.0版本开始,查询缓存功能已被弃用。
2.InnoDB缓冲池(Buffer Pool):对于使用InnoDB存储引擎的MySQL数据库,InnoDB缓冲池是一种重要的内存缓存机制。它用于缓存数据和索引,以便更快地访问这些数据。当数据库需要读取或写入数据时,它首先会尝试在缓冲池中找到这些数据。如果找到了,就可以直接在内存中完成操作,而无需访问磁盘。这样可以大大提高数据库的性能。


连表查询的底层原理?


首先说明驱动表(主表)和非驱动表(从表)
内连接:一般是通过查询优化器决定的;
左连接:一般是左边的表为主表,右边的表为从表;
右连接:一般是右边的表为主表,左边的表为从表;
了解了驱动表和被驱动表以后,现在我们看下MySQL究竟是怎么做join查询的。
简单嵌套循环连接(当然MySQL默认没有采用这种算法。) 简单嵌套循环连接(Simple Nested-Loop join)是从驱动表A中取出一条数据,遍历表B,将匹配到的数据放到result.. 以此类推, 如下图所示:

算法简单粗暴,比如驱动表A有10条,被驱动表B有100条,那么扫描次数是A+A*B, 每一次扫描其实就是从硬盘中读取数据加载到内存中,也就是一次IO,而IO是最大的瓶颈,所以效率低下。


块嵌套循环连接(引入了join buffer) 块嵌套循环连接(Block Nested-Loop Join)是对上面一种算法的优化,引入了join buffer缓冲区,将驱动表join相关的部分数据列、缓存到join buffer中,然后全表扫描被驱动表,被驱动表的每一条记录一次性和join buffer中的所有驱动表记录进行匹配(内存中操作),将简单嵌套循环中的多次比较合并成一次,降低了被驱动表的访问频率。

索索引嵌套循环连接
索引嵌套循环连接(Index Nested-Loop Join)就是效率最高的,前提条件是被驱动表的关联字段建立了索引。通过驱动表匹配条件直接与被驱动表的索引进行匹配,避免和内存表的每条记录去进行比较,这样极大的减少了对内存表的匹配次数。

Hash Join(MySQL 8) 从MySQL8后面的版本开始废弃块嵌套循环连接,默认使用了Hash Join的方式。
Hash Join算法利用哈希表来实现和加速数据库中的join操作。Hash Join的基本原理是将其中一个表(通常称为“构建表”)加载到内存中,并生成哈希表。然后,对另一个表(通常称为“扫描表”)进行扫描,匹配哈希表中的数据,最终得到连接结果。这种方式在当其中一个表较小或者可以完全缓存到内存中时,效率较高。Hash Join只能应用于等值连接,这是由Hash的特点决定的。


MySQL的数据是如何存储到磁盘的?


MySQL中的每个数据库都存储为文件系统上的目录,每个表存储为一个单独文件,mysql存储在磁盘中不是以行数据为单位的,而是以数据页为单位的,一页数据默认是16KB。存储多行数据,数据之间通过双向链表进行连接,页之间也通过链表进行连接。
行溢出:一个页的大小就是16KB,大于这个值就是行溢出;
数据页:一个数据页的上限是16K;


表到底是什么概念?


表(Table)是数据库的核心组件之一,用于存储和组织数据。表是一个二维的数据结构,由行(Row)和列(Column)组成。每一列代表一个特定的数据类型(如整数、字符串、日期等),而每一行则包含了一组与这些列相对应的数据值。
逻辑上是表,物理上是什么?
物理上实际就是数据页;


ACID事务特性以及隔离级别?


原子性
事务是一个不可分割的工作单元,事务中的操作要么全部发生,要么全部不发生;如果一部分成功,一部分失败,那么就进行回滚操作;
实现:原子性依靠undolog回滚日志实现,每次对数据进行修改和删除插入的操作都会生成一条undolog来记录操作之前的数据状态,使用rollback将执行的sql语句效果进行撤销操作;
一致性
事务前后的数据完整性一致;
实现:依靠的是其他三个特性实现的;
隔离性:
保证事务不被其他事务的并发操作环境干扰,多个并发事务之间要相互隔离;
实现:通过锁机制实现的,事务对数据操作的时候对数据加锁,保证事务操作数据的前后看到的数据是一致的;
持久性
指的是事务一旦被提交,那么他对数据的改变就是永久的;
实现:通过redo log实现,redo log记录的是对数据库的操作;


OLTP与OLAP的区别?


oltp(联机事务处理):是传统的关系型数据库的主要应用,用于基本的、日常的事务处理,例如银行的交易记录;
olap(联机分析处理):是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供了直观易懂的查询结果,。常见的应用是复杂的动态报表系统;
总体来说,OLTP用于日常处理、OLAP用于数据分析。


DML是什么呢?


dml是数据操作语言,用于检索或者修改数据,我们平常所说的增删改查就属于dml;


ddl是什么?


ddl是数据定义语言,用于操作数据结构,例如创建表,删除表,更改索引等;


DCL是什么?


数据控制语言,用于定义数据库用户的权限,比如创建用户,授权用户,删除用户等都是DCL。


能说说varchar与char的区别是什么吗?


char是一种固定长度的类型,varchar则是一种可变长度的类型。比如char(128)和varchar(128),前者无论字符串长短,在磁盘上,都会占据固定的128字符大小。后者是可变长度,不过它最大也不能超过128。


既然varchar是变长,那是不是设置varchar(1000)一定比varchar(100)好?


不是这样的。虽然varchar是变长,在相同长度下,磁盘空间占用一样,将值设置更大一些,弹性空间也更大。但也不是完全没有代价的
在内存加载的时候,每次都是按最大空间来分配的。显然,在排序场景,或者一些临时表聚合场景,更大空间会产生明显的不利影响。


varchar是变长,char是定长,那能用varchar完全代替char么?

varchar的优点是更灵活。但是char也不是一无是处的。
首先,varchar会额外用一个字节存储长度信息,而char则节约了一个字节;
其次,char的存储空间都是一次性分配的,存储是固定连续的,而varchar的存储的长度是可变的,当varchar更改前后数据长度不一致时,就不可避免的会出现碎片的问题。针对此,需要进行碎片消除作业,也是额外的成本。
一般来说,长度固定的字段,还是用char比较合适,比如Hash,就很适合用char。


varchar(11)和int(11)中的50,有什么区别?


varcahr中代表能存11个字符,int中只是代表显示长度,对大多数应用没有意义,只是规定一些工具用来显示字符的个数,比如int(1)和int(20)存储和计算其实是一样的。


接下来能说说delete和truncate的区别吗?


delete是删除行;truncate是整表删除。具体来说,有下面几点区别:
1.truncate之后,会释放空间;delete之后,不会释放空间,因为delete只是在行上标记删除,后续可以复用;
2.delete因为是DML,会产生redo log;truncate是DDL则不会;
3.truncate效率更高;
4.truncate之后,id从头开始;delete不会。


你知道MySQL有哪些存储引擎吗?


首先有Innodb引擎,它提供了对数据库ACID事务的支持,并且还提供了行级锁和外键的约束。Innodb的设计目标就是处理大数据容量的数据库系统; 还有MyIASM引擎,它是原本Mysql的默认引擎,不提供事务的支持,也不支持行级锁和外键; 最后还有一个MEMORY引擎,它的所有数据都在内存中,数据的处理速度快,但是安全性不高,很少使用。 那么ACID是什么呢? 它是原子性、一致性、隔离性和持久性的缩写。


主键和外键分别是什么?

主键是表中的一个或多个字段,它的值用于唯一的标识表中的某一条记录。
外键是说某张表b的主键,在另一张表a中被使用,那么a中该字段可以使用的范围,取决于b。外键约束主要用来维护两个表之间数据的一致性。

那么一张表一定有主键吗?


是的。一定有。如果主动设置,则采用设置的。否则会自动生成一个默认的行。


你怎么查看有多少个Sql语句在执行?


可以用show processlist,它是显示用户正在运行的线程的命令。需要注意的是,用户都只能看到自己正在运行的线程,除非是root用户,或者专门进行了授权的用户。


 

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

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

相关文章

线程(三)【线程互斥(下)】

目录 4. 互斥锁4.1 解决数据不一致问题 5. 锁的原理5.1 加锁5.2 解锁 6. 可重入 vs 线程安全 4. 互斥锁 NAMEpthread_mutex_destroy, pthread_mutex_init - destroy and initialize a mutex // 创建、释放锁SYNOPSIS#include <pthread.h>// pthread_mutex_t: 线程库提供…

如何使用AWS Lambda构建一个云端工具(超详细)

首发地址&#xff08;欢迎大家访问&#xff09;&#xff1a;如何使用AWS Lambda构建一个云端工具&#xff08;超详细&#xff09; 1 前言 1.1 无服务器架构 无服务器架构&#xff08;Serverless Computing&#xff09;是一种云计算服务模型&#xff0c;它允许开发者构建和运行…

网络爬虫总结与未来方向

通过深入学习和实际操作&#xff0c;网络爬虫技术从基础到进阶得以系统掌握。本节将全面总结关键内容&#xff0c;并结合前沿技术趋势与最新资料&#xff0c;为开发者提供实用性强的深度思考和方案建议。 1. 网络爬虫技术发展趋势 1.1 趋势一&#xff1a;高性能分布式爬虫 随…

实验十三 生态安全评价

1 背景及目的 生态安全是生态系统完整性和健康性的整体反映&#xff0c;完整健康的生态系统具有调节气候净化污染、涵养水源、保持水土、防风固沙、减轻灾害、保护生物多样性等功能。维护生态安全对于人类生产、生活、健康及可持续发展至关重要。随着城市化进程的不断推进&…

archlinux安装waydroid

目录 参考资料 注意 第一步切换wayland 第二步安装binder核心模组 注意 开始安装 AUR安裝Waydroid 启动waydroid 设置网络&#xff08;正常的可以不看&#xff09; 注册谷歌设备 安装Arm转译器 重启即可 其他 参考资料 https://ivonblog.com/posts/archlinux-way…

鸿蒙NEXT开发案例:随机数生成

【引言】 本项目是一个简单的随机数生成器应用&#xff0c;用户可以通过设置随机数的范围和个数&#xff0c;并选择是否允许生成重复的随机数&#xff0c;来生成所需的随机数列表。生成的结果可以通过点击“复制”按钮复制到剪贴板。 【环境准备】 • 操作系统&#xff1a;W…

【Android】Service使用方法:本地服务 / 可通信服务 / 前台服务 / 远程服务(AIDL)

1 本地Service 这是最普通、最常用的后台服务Service。 1.1 使用步骤 步骤1&#xff1a;新建子类继承Service类&#xff1a;需重写父类的onCreate()、onStartCommand()、onDestroy()和onBind()方法步骤2&#xff1a;构建用于启动Service的Intent对象步骤3&#xff1a;调用st…

【LeetCode热题100】队列+宽搜

这篇博客是关于队列宽搜的几道题&#xff0c;主要包括N叉树的层序遍历、二叉树的锯齿形层序遍历、二叉树最大宽度、在每个数行中找最大值。 class Solution { public:vector<vector<int>> levelOrder(Node* root) {vector<vector<int>> ret;if(!root) …

双因子认证:统一运维平台安全管理策略

01双因子认证概述 双因子认证&#xff08;Two-Factor Authentication&#xff0c;简称2FA&#xff09;是一种身份验证机制&#xff0c;它要求用户提供两种不同类型的证据来证明自己的身份。这通常包括用户所知道的&#xff08;如密码&#xff09;、用户所拥有的&#xff08;如…

Apple Vision Pro开发002-新建项目配置

一、新建项目 可以选择默认的&#xff0c;也可以选择Universal 3D 二、切换打包平台 注意选择Target SDK为Devices SDk&#xff0c;这种适配打包到真机调试 三、升级新的Input系统 打开ProjectSettings&#xff0c;替换完毕之后引擎会重启 四、导入PolySpatial 修改上图红…

瑞佑液晶控制芯片RA6807系列介绍 (三)软件代码详解 Part.10(让PNG图片动起来)完结篇

RA6807是RA8876M的缩小版&#xff0c;具备RA8876M的所有功能&#xff0c;只将MCU控制接口进行缩减&#xff0c;仅保留SPI-3和I2C接口&#xff0c;其它功能基本相同。 该芯片最大可控制854x600的分辨率&#xff0c;内建64Mbits显存&#xff0c;多个图层&#xff0c;使用起来相当…

机器人SLAM建图与自主导航:从基础到实践

前言 这篇文章我开始和大家一起探讨机器人SLAM建图与自主导航 &#xff0c;在前面的内容中&#xff0c;我们介绍了差速轮式机器人的概念及应用&#xff0c;谈到了使用Gazebo平台搭建仿真环境的教程&#xff0c;主要是利用gmapping slam算法&#xff0c;生成一张二维的仿真环境…

一篇保姆式centos/ubuntu安装docker

前言&#xff1a; 本章节分别演示centos虚拟机&#xff0c;ubuntu虚拟机进行安装docker。 上一篇介绍&#xff1a;docker一键部署springboot项目 一&#xff1a;centos 1.卸载旧版本 yum remove docker docker-client docker-client-latest docker-common docker-latest doc…

Robot | 用 RDK 做一个小型机器人(更新中)

目录 前言架构图开发过程摄像头模型转换准备校准数据使用 hb_mapper makertbin 工具转换模型 底版开发 结语 前言 最近想开发一个小型机器人&#xff0c;碰巧看到了 RDK x5 发布了&#xff0c;参数对于我来说非常合适&#xff0c;就买了一块回来玩。 外设也是非常丰富&#xf…

如何在 UniApp 中实现 iOS 版本更新检测

随着移动应用的不断发展&#xff0c;保持应用程序的更新是必不可少的&#xff0c;这样用户才能获得更好的体验。本文将帮助你在 UniApp 中实现 iOS 版的版本更新检测和提示&#xff0c;适合刚入行的小白。我们将分步骤进行说明&#xff0c;每一步所需的代码及其解释都会一一列出…

软件工程导论 选填题知识点总结

一 原型化方法是一种动态定义需求的方法&#xff0c;提供完整定义的需求不是原型化方法的特征&#xff0c;其特征包括尽快建立初步需求、简化项目管理以及加强用户参与和决策。 软件危机的表现包括用户对已完成的软件系统不满意的现象经常发生、软件产品的质量往往靠不住、软件…

软件测试面试之常规问题

1.描述一下测试过程 类似题目:测试的生命周期 思路:这是一个“范围”很大的题目&#xff0c;而且回答时间一般在3分钟之内&#xff0c;不可能非常详细的描述整个过程&#xff0c;因此答题的思路要从整体结构入手&#xff0c;不要过细。为了保证答案的准确性&#xff0c;可以引…

Linux|内存级文件原理

目录 进程与文件 Linux下的文件系统 文件操作&#xff0c;及文件流 C语言函数 文件流 文件描述符 系统调用操作 系统调用参数 重定向与文件描述符 输出重定向 输入重定向 文件内容属性 Linux下一切皆文件 进程与文件 当我们对文件进行操作时&#xff0c;文件必须…

洛谷 P1722 矩阵 II C语言 记忆化搜索

题目&#xff1a; https://www.luogu.com.cn/problem/P1722 我们按照案例画一下 我们会发现&#xff0c;会出现重复的子结构。 代码如下&#xff1a; #include<iostream> using namespace std; int mem[300][300]; int n; int f[305][305]; int dfs(int x,int red,…

RTSP播放器EasyPlayer.js播放器分辨率高的视频在设置container的宽高较小时,会出现锯齿状的画面效果

流媒体播放器的核心技术及发展趋势展现了其在未来数字生活中的无限潜力。随着技术的不断进步和市场的持续发展&#xff0c;流媒体播放器将在内容创新、用户体验优化以及跨平台互通等方面取得新的突破。对于从业者而言&#xff0c;把握这些趋势并积极应对挑战将是实现成功的关键…