大数据面试题 —— 数据库

news2025/1/4 14:38:26

目录

  • 关系型数据库与非关系型数据库的区别
  • 数据库三范式
  • MySQL中 drop、delete、truncate的区别
  • MySQL中 char和 varchar 的区别
  • MySQL中inner join、left join、right join以及full join的区别
  • MySQL中 having 和 where 的区别
  • count(*)、count(1)、count(列名)的区别
  • MySQL中视图和表的区别
  • 数据完整性约束
  • SQL 的执行顺序
  • SQL 的优化方法
  • 大数据量里的分页查询怎么优化
  • 写了一个sql ,如何查看有没有命中索引
  • MySQL 的存储引擎和区别
  • 索引是什么
  • 索引为什么可以加快查询速度
  • MySQL中索引的分类
  • B树和B+树的区别
  • MySQL的索引结构
  • 为什么不用二叉树、红黑树、哈希表、B树
  • 聚集索引和非聚集索引的区别
  • Innodb 和 MyISAM 的索引的区别
  • 主键索引和辅助索引具体是什么
  • 覆盖索引是什么
  • 回表查询是什么
  • 简述事务
  • MySQL是如何保证ACID的
  • MVCC 讲一下
  • 数据库事务并发会引发哪些问题
  • 事务的四个隔离级别
  • Mysql中常见的几种日志

关系型数据库与非关系型数据库的区别


(1)关系型数据库是按照二维表的结构来存储数据,常用的有 mysql、oracle;非关系型数据库一般基于键值对(例如Redis)、基于文档(例如Mongodb)等形式来存储数据。

(2)非关系型数据库一般只能保证数据的最终一致性(更新后的数据不一定立马能访问,但是最后是能访问到的),而关系型数据库保证数据的强一致性
也就是更新后的数据立马能被访问到。

(3)关系型数据库横向扩展比较难(难以跨多台服务器进行横向扩展),而一些非关系型数据库则原生就支持数据的水平扩展。(在多台服务器之间水平扩展)

数据库三范式


在这里插入图片描述

MySQL中 drop、delete、truncate的区别


三者都表示删除。

(1)drop、truncate 是 DDL ,数据定义语言,delete 是 DML,数据操纵语言;

(2)delete 用来删除表的一部分数据或者全部数据,drop 是用来删除表以及表中的全部数据,truncate 是用来删除表中的全部数据;

(3)delete 删除的数据可以回滚,drop、truncate删除的数据不可以回滚;

(4)执行速度:drop > truncate > delete。

MySQL中 char和 varchar 的区别


在这里插入图片描述

MySQL中inner join、left join、right join以及full join的区别


在这里插入图片描述

MySQL中 having 和 where 的区别


(1)where 后面不能使用聚合函数,而 having 后面可以使用聚合函数;

(2)where 用在 groupby 的前面,而 having 用在 groupby 的后面。

(3)where 对数据行进行过滤, having 是对 分组进行过滤。

count(*)、count(1)、count(列名)的区别


详情

MySQL中视图和表的区别


视图是一种虚拟的表,不存储数据,它是一个数据库查询结果的可视化表示。

(1)视图是外模式(也称为用户模式或者子模式,是用户或者应用程序所见到的数据库的逻辑结构),表是内模式(也称为存储模式或物理模式,是数据库的物理结构的描述);

(2)视图的建立和删除只影响视图本身,不影响对应的基本表;

(3)视图只是一个或多个表依照某个条件组合而成的结果集,没有实际的物理记
录。

数据完整性约束


在这里插入图片描述

SQL 的执行顺序


书写顺序:

SELECT -> DISTINCT -> FROM -> JOIN -> ON -> WHERE -> GROUP BY -> HAVING -> ORDER BY -> LIMIT

执行顺序:

FROM -> JOIN -> ON -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT

SQL 的优化方法


(1)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉
及的列上建立索引;

(2)应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用
索引而进行全表扫描;

当使用OR连接条件时,数据库引擎需要在索引中同时查找满足其中任意一个条件的记录。然而,索引通常是按照特定列的顺序进行组织的,而不是按照多个列的组合顺序。因此,对于包含OR条件的查询,如果每个条件涉及的列没有单独的索引,数据库引擎就无法利用索引快速定位到满足条件的记录,而只能进行全表扫描来逐行检查每条记录是否满足其中任意一个条件。
另外,即使每个条件涉及的列都有索引,OR连接条件也可能导致索引失效。这是因为在OR条件中,如果其中一个条件的选择性很低,即满足该条件的记录数量很大,而另一个条件的选择性较高,即满足该条件的记录数量较少,数据库引擎可能会选择放弃使用索引,而进行全表扫描,以避免在索引中进行大量的随机访问,从而导致性能下降。

(3)对慢查询进行优化:看是否查询了不需要的列,查询条件是否没有命中索引

大数据量里的分页查询怎么优化


使用LIMIT和OFFSET进行分页:

在这里插入图片描述

优化:

在这里插入图片描述

写了一个sql ,如何查看有没有命中索引


使用 EXPLAIN 关键字加上你的查询语句,例如

EXPLAIN SELECT * FROM your_table WHERE your_condition;

执行以上语句后,MySQL会返回一组关于查询执行计划的信息。其中最重要的是 “key” 列和 “Extra” 列。

  • “key” 列:表示查询使用的索引。如果在 “key” 列中显示了索引名,则表示查询命中了相应的索引。
  • “Extra” 列:提供了关于查询执行的额外信息。如果 “Using index” 出现在 “Extra” 列中,则表示查询只使用了索引,而不需要访问实际的数据行。

MySQL 的存储引擎和区别


Innodb 和 MyISAM 的区别:

  • 存储文件:MyISAM (索引数据分离存储)每个表有两个文件,其中MYD是数据文件,MYI是索引文件,Innodb (索引数据一起存储)每个表只有一个idb文件;
  • Innodb支持外键,MyISAM 不支持外键;
  • Innodb支持事务,MyISAM 不支持事务;
  • Innodb支持行级锁,MyISAM 支持表级锁;
  • Innodb支持MVCC,MyISAM 不支持MVCC。
  • Innodb的性能比 MyISAM 更强大。

索引是什么


索引是一种帮助mysql提高查询效率的数据结构,通常是基于一个或多个列创建的,就像是书的目录一样。索引提供了一种快速查找数据的方式,而不必扫描整张表。

其优点:

  • 加快查询速度;
  • 帮助排序以避免使用临时表;
  • 将随机的IO转换为顺序的IO。

索引这么多优点,为什么不对表中的每一个列创建一个索引?

  • 创建索引和维护索引要耗费时间
  • 索引需要占用磁盘空间来进行存储
  • 在对表进行插入、更新和删除操作时会影响性能

索引为什么可以加快查询速度


数据库索引可以加速查询操作的原因主要有以下两点:

  • 减少磁盘I/O操作:当查询没有使用索引时,数据库需要扫描整个数据表来获取查询结果,这会导致大量的磁盘I/O操作。而使用索引可以减少磁盘I/O操作的次数,因为数据库可以直接在索引树上进行搜索,而不必扫描整个数据表。
  • 减少数据比较次数:在没有索引的情况下,数据库需要逐行比较整个数据行,以找到符合查询条件的行。而在使用索引的情况下,数据库可以只比较索引树上的节点,而不必比较整个数据行,从而减少了数据比较的次数。

MySQL中索引的分类


在这里插入图片描述

最左匹配原则就是指在联合索引中,如果你的 SQL 语句中用到了联合索引中的最左边的索引,那么这条 SQL语句就可以利用这个联合索引去进行匹配。如果一个复合索引包含列A、B、C,那么只有当查询中包含了列A的条件时,数据库才可以利用这个组合索引来加速查询。

B树和B+树的区别


在这里插入图片描述

MySQL的索引结构


在这里插入图片描述

为什么不用二叉树、红黑树、哈希表、B树


在这里插入图片描述

红黑树是一种特殊的平衡二叉树。

在这里插入图片描述

为什么不用B树,见上题。

聚集索引和非聚集索引的区别


在这里插入图片描述

Innodb 和 MyISAM 的索引的区别


在这里插入图片描述

主键索引和辅助索引具体是什么


在这里插入图片描述

覆盖索引是什么


在这里插入图片描述

回表查询是什么


在这里插入图片描述

简述事务


一个事务是由一条或者多条 sql 语句组成的不可分割的单元,要么全部执行成功,要么全部执行失败。

事务有四个基本特性(ACID),分别是原子性,一致性,隔离性,持久性

  • 原子性是说事务是一个不可分割的工作单位,事务中的所有操作要么全部执行,要么全部不执行,不会出现部分执行的情况。
  • 一致性是说事务的执行必须使数据库从一个一致性状态转换到另一个一致性状态。这意味着事务的执行不会破坏数据的完整性约束。
  • 隔离性是指事务的执行不会被其他事务干扰。在并发环境中,每个事务都感觉不到其他事务同时进行的情况,从而保证了事务的独立性。
  • 持久性是指一旦事务提交,其对数据库的更改就是永久性的。即使系统发生故障,已提交的更改也不会丢失。

MySQL是如何保证ACID的


在这里插入图片描述

MVCC 讲一下


MVCC 多版本并发控制,就是同一条记录在系统中存在多个版本。其存在目的是在
保证数据一致性的前提下提供一种高并发的访问性能。对数据读写在不加读写锁的
情况下实现互不干扰,从而实现数据库的隔离性,在事务隔离级别为读提交和可重
复读中使用到。

数据库事务并发会引发哪些问题


在这里插入图片描述

事务的四个隔离级别


InnoDB 的默认事务隔离级别是可重复读

在这里插入图片描述

Mysql中常见的几种日志


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

ardupilot的固定翼飞行模式

飞行模式 APM所有的飞行模式都在对应的机型的文件夹下的mode.h里面有定义,针对于不同的模型,功能函数在基类中Mode中都是以纯虚函数实现了, 然后在继承的子类中重新实现它,以实现多态。 takeoff模式 参见网址在 ArduPlane 4.0 及更高版本中,自动起飞本身也是一种模式(…

深入理解 Linux 文件系统与动静态库

目录 一、Linux 文件系统中的 inode 二、软硬链接 三、动静态库 在 Linux 系统中,文件系统和动静态库是非常重要的概念。本文将带大家深入了解这些内容,让你在技术之路上更进一步。 一、Linux 文件系统中的 inode 何为文件系统?对计算机中…

MySQL#MySql表的操作

目录 一、创建表 二、查看表结构 三、修改表 1.修改表的名字 2.新增一个列 3.修改列 4.删除列 5.修改列的名称 四、删除表 一、创建表 语法: CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校…

基于Transformer网络的多步预测模型

包括完整流程数据代码处理: 多步预测数据集制作、数据加载、模型定义、参数设置、模型训练、模型测试、预测可视化、多步预测、模型评估 ● 环境框架:python 3.9 pytorch 1.8 及其以上版本均可运行 ● 使用对象:论文需求、毕业设计需求者…

为什么要计算光伏发电量等数据?

在当今世界,随着全球气候变化和环境问题的日益突出,可再生能源的利用和发展成为了全球关注的焦点。其中,光伏发电作为最具代表性的可再生能源之一,因其清洁、可再生的特性而备受瞩目。然而,光伏发电量的计算及其相关数…

pytest + yaml 框架 - 参数化读取文件路径优化

针对小伙伴提出参数化时读取外部文件,在项目根路径运行没问题,但是进入到项目下子文件夹运行用例,就会找不到文件问题做了优化。 关于参数化读取外部文件相关内容参考前面这篇pytest yaml 框架 -25.参数化数据支持读取外部文件txt/csv/json/…

Day3 | Java基础 | 4常见类

Day3 | Java基础 | 4 常见类 基础版Object类equalshashCode(散列码)hashCode和equals clone方法String类 问题回答版Object类Object类的常见方法有哪些?和equals()的区别是什么?为什么要有hashCode?hashCode和equals的…

单位圆内的正交向量多项式,第一部分:由Zernike多项式的梯度导出的基组

clear all; close all; clc; %% I1=double(imread(E:\zhenlmailcom-E8E745\华为家庭存\image\imgs\right\0.bmp)); I2=double(imread(E:\zhenlmailcom-E8E745\华为家庭存储\.法\image\imgs\right\1.bmp)); I3=double(imread(E:\zhenlmailcom-E8E745\华为家庭存储\.p\image\imgs…

探秘Tailwind CSS:前端开发的加速器(Tailwind CSS让CSS编写更简洁)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Tailwind CSS 📒📝 快速体验📝 深入学习⚓️ 相关链接 ⚓️📖 介绍 📖 在这个快速迭代的互联网时代,前端开发效率和设计质量的双重要求,使得开发者们不断寻求更高效的工具和方法。今天,我们要介绍的是一个能够极大…

IPFoxy:什么是静态住宅IP?静态ISP代理指南

静态住宅代理(也称为静态ISP代理)是最流行的代理类型之一。它们也是隐藏您的身份并保持在线匿名的最佳方法之一。您为什么要使用住宅代理而不是仅使用常规代理服务?下面我具体分享。 一、什么是静态住宅代理? 首先,我…

IntelliJ IDEA 配置JDK

IntelliJ IDEA-之配置JDK 我们的开发神器IDEA安装好了之后,在实际开发中,我们如何去配置好JDK的版本呢? 注意:需要保证JDK在已经成功安装的情况下,再进行IDEA的配置 现在就行动,让IntelliJ IDEA成为你征…

FebHost:什么是域名DNS服务器?

域名服务器是一种将域名转换为IP地址的计算机。在域名系统(DNS)中,它起着至关重要的作用。用户只需在浏览器的地址栏输入域名,而无需手动输入网站服务器的IP地址,就可以访问网站。 每个已注册的域名都必须在其DNS记录…

uniapp获取微信小程序头像并上传(前后端代码)

背景 在uniapp实现微信小程序登陆过程中, 我们提供了用户获取自己的头像功能。 但是微信获取的头像都是临时路径。 需要我们进行转换并上传。 本文记录从前后端如何完成这个头像获取,上传到服务器的过程。 //这个就是微信的临时头像路径 wxfile://tmp_…

基于大语言模型的Agent的探索与实践

AI代理是人工智能领域的核心概念之一,它指的是能够在环境中感知、做出决策并采取行动的计算实体。代理可以是简单的,如自动化的网页爬虫,也可以是复杂的,如能够进行战略规划和学习的自主机器人。 AI代理的概念最早源于哲学探讨&am…

Linux 文件

文章目录 文件操作回顾(C/C)系统调用接口 管理文件认识一切皆文件C/C的文件操作函数与系统调用接口的关系……重定向与缓冲区 -- 认识重定向与缓冲区 -- 理解使用重定向缓冲区实现一个简单的Shell(加上重定向)标准输出和标准错误(在重定向下的意义) 磁盘文件磁盘存储文件操作系…

景源畅信电商:抖音小店有哪些比较热门的宣传方法?

抖音小店的热门宣传方法,是许多商家关注的焦点。在数字化营销时代,有效的宣传手段不仅能提升品牌知名度,还能吸引潜在消费者,促进销售。以下是针对抖音小店热门宣传方法的详细阐述: 一、短视频内容营销 作为抖音的核心…

思腾合力受邀参加VALSE 2024视觉与学习青年学者研讨会

在充满学术氛围的五月,思腾合力荣幸受邀参加了于2024年5月5-7日在重庆举行的第十四届VALSE大会。作为视觉与学习领域的顶级交流平台,VALSE大会每年都吸引着全国专家与学者的目光。 本次大会不仅延续了往届的高水平学术研讨,还进一步拓宽了研究…

A100 解析:为何它成为 AI 大模型时代的首选?

前言 NVIDIA A100 Tensor Core GPU 可针对 AI、数据分析和 HPC 应用场景,在不同规模下实现出色的加速,有效助力更高性能的弹性数据中心。A100 采用 NVIDIA Ampere 架构,是 NVIDIA 数据中心平台的引擎。A100 的性能比上一代产品提升高达 20 倍…

Flume进阶

目录 第1关:拦截器的使用 第2关:自定义拦截器 第1关:拦截器的使用 代码文件: # Define source, channel, sink #agent名称为a1# Define source #source类型配置为avro,监听8888端口,后台会自动发送数据到该端口 #拦截后…

Git泄露(CTFHUB的git泄露)

log 当dirsearch 扫描一下,命令: python dirsearch.py -u url/.git 发现存在了git泄露 借助kali里面,打开GitHack所在的目录,然后 输入: python2 GitHack.py -u url/.git/ 必须要用Python2 tree 命令 可以看到…