大数据面试题 —— 数据库

目录

  • 关系型数据库与非关系型数据库的区别
  • 数据库三范式
  • 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.mzph.cn/diannao/9519.shtml

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

相关文章

Threejs 学习笔记 | 灯光与阴影

文章目录 Threejs 学习笔记 | 灯光与阴影如何让灯光照射在物体上有阴影LightShadow - 阴影类的基类平行光的shadow计算投影属性 - DirectionalLightShadow类平行光的投射相机 聚光灯的shadow计算投影属性- SpotLightShadow类聚光灯的投射相机 平行光 DirectionalLight聚光灯 Sp…

12.轻量级锁原理及其实战

文章目录 轻量级锁原理及其实战1.轻量级锁的核心原理2.轻量级锁的演示2.1.轻量级锁的演示代码2.2.结果分析 3.轻量级锁的分类3.1.普通自旋锁3.2.自适应自旋锁 4.轻量级锁的膨胀 轻量级锁原理及其实战 引入轻量级锁的主要目的是在多线程环境竞争不激烈的情况下, 通过…

verilog中不重叠序列检测

编写一个序列检测模块,检测输入信号(a)是否满足011100序列, 要求以每六个输入为一组,不检测重复序列,例如第一位数据不符合,则不考虑后五位。一直到第七位数据即下一组信号的第一位开始检测。当…

C++下使用Matplotlib-cpp的一些配置

Aconda3安装使用 https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/下载 切换清华源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ con…

修改latex中block中公式与block标题间隔过大的问题

修改block中公式与block间隔过大的问题 如图的block中公式出现了空白:代码见下方 \begin{proof}[证明]\begin{align*}&Z\alpha \beta _XX\beta _YY\varepsilon \rightarrow XZ\alpha X\beta _XX^2\beta _YXY\varepsilon X&\\&E\left( Z \right) \alpha \beta _XE\…

STM32实现1.8寸液晶屏 LCD SPI串口显示屏模块 TFT彩屏(标准库和HAL库实现)

目录 一、所选模块 液晶模块选择(淘宝上均有售卖) 模块引脚 二、嵌入式单片机型号 三、接线表设计 四、开发环境版本说明 五、标准库实现 六、HAL库实现 七、完整工程(内含标准库和HAL库源码) 代码链接 一、所选模块 液…

pycharm如何对for循环中第n次循序执行断点

目录 在 PyCharm 中,您可以设置条件断点来实现这个功能,这样只有在满足特定条件时断点才会被触发。以下是设置仅在 for 循环的第 n 次迭代时触发断点的步骤: 设置断点: 首先,找到您想要在 for 循环中设置断点的行。点击…

《应用现代化技术能力成熟度评估模型》介绍

在中国软件行业协会、应用现代化产业联盟以及中国电子技术标准化研究院的指导下,产业多家企业共同支持和参与下,完成的《应用现代化技术能力成熟度评估模型》标准。该标准从应用敏捷、稳定可靠、安全可信、业务智能、成本优化五大维度及22个能力项来评估…

计算机网络学习记录 网络的大概认识 Day1

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 计算机网络学习记录Day1 本文基于1.1 计算机网络在信息…

Highcharts 实现3D饼图 tooltip轮播

实现3D饼图,并且轮播显示tooltip 自定义toottip样式 import Highcharts from highcharts; import highcharts from highcharts; import highcharts3d from highcharts/highcharts-3d;highcharts3d(Highcharts); highcharts3d(highcharts); import { useEffect, use…

2024 VMware VCP一条龙通关-送题库

VMware VCP-DCV 2024(2V0-21.23)认证考试,2024年可高分通过。 1.5. An administrator has a host profile named Standard-Config. The administrator wants to change the other host profiles to use only the storage configuration setti…

自定义付费报名表单系统源码 带完整的安装代码包以及安装代码包搭建部署教程

在当今数字化时代,各种在线服务需求日益增长,其中,自定义付费报名表单系统成为了许多机构、组织和企业不可或缺的一部分。为了满足这一市场需求,小编给大家分享一款功能强大、易于部署的自定义付费报名表单系统源码。本文将为您详…

Python嵌套绘图并为条形图添加自定义标注

论文绘图时经常需要多图嵌套,正好最近绘图用到了,记录一下使用Python实现多图嵌套的过程。 首先,实现 Seaborn 分别绘制折线图和柱状图。 绘制折线图import seaborn as snsimport matplotlib.pyplot as pltimport warningswarnings.filterw…

STM32CubeMX学习笔记30---FreeRTOS内存管理

一、简介 1 基本概念 FreeRTOS 操作系统将内核与内存管理分开实现,操作系统内核仅规定了必要的内存管理函数原型,而不关心这些内存管理函数是如何实现的,所以在 FreeRTOS 中提供了多种内存分配算法(分配策略)&#xf…

《二十二》Qt 音频编程实战---做一个音频播放器

1.UI界面制作 作为一个音乐播放器,最基础的肯定就是播放、暂停、上一首以及下一首,为了使这个界面好看一点,还加入了音量控制、进度条、歌曲列表等内容,至于这种配色和效果好不好看,我也不知道,个人审美一如…

智启未来:富唯智能AI-ICDP引领的可重构柔性装配产线

在全球制造业竞争日益激烈的今天,如何快速响应市场变化、提高生产效率、降低生产成本,成为了企业面临的重要挑战。随着产品个性化时代的到来,装配产品频繁变换,多品种小批量的生产模式逐渐成为主流。在这一背景下,富唯…

python 前台页面和oracle数据库联动案例-用户注册

今天是python 入门day3,案例实现界面如图,比较简单, 一个简单的用户注册页面,并且可以与Oracle数据库进行交互。 界面如图: 实现这个简单demo的过程中,遇到很多错误, 1、提交过程中提示主键不…

照片文件夹惊变白板?揭秘背后的原因及恢复秘籍

我们生活在一个数字化时代,照片已经成为记录生活的重要方式。然而,当你兴冲冲地打开保存珍贵记忆的文件夹时,却发现里面的照片全都变成了白板,这种心情无异于晴天霹雳。那么,这究竟是怎么回事呢? 照片文件夹…

【记录】常见的前端设计系统(Design System)

解释一下设计系统的定义,以及在国内,都有那些优秀的设计系统可以学习,希望可以帮到大家。 什么是设计系统(Design System)? 设计系统(Design System)是一套综合性的指导原则、组件和规则&…

Mysql8.0.30一次表锁问题的解决

起因 给material_config_field_data表的字段建立全文索引的时,发现该表卡死,然后无法对该表进行任何操作。 查找问题 执行sql #这个命令会显示InnoDB存储引擎的详细状态信息,包括锁等待和锁争用的信息 SHOW ENGINE INNODB STATUS结果 复制S…