大数据面试题 —— 数据库

目录

  • 关系型数据库与非关系型数据库的区别
  • 数据库三范式
  • 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.mfbz.cn/a/609824.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】-类模板-002

1创建类模板 (1)新建工程 (2) (3) (4) (5)模板运行结果 2【UI】设计器 (1)跳转到【UI】设计器 (2)添加…

神经网络中的归一化

我们今天介绍一下神经网络中的归一化方法~ 之前学到的机器学习中的归一化是将数据缩放到特定范围内,以消除不同特征之间的量纲和取值范围差异。通过将原始数据缩放到一个特定的范围内,比如[0,1]或者[-1,1],来消除不同特征之间的量纲和取值范围…

Ti雷达CFG阅读技巧

Ti雷达CFG阅读技巧 使用TI雷达测量数据前,需要考虑不同的设计参数之间的区别,虽然Ti雷达的说明文档非常清晰,直接查询mmwave_sdk_user_guide文档就可以了,但是用的多了,参数都知道可能是什么含义,来回查询…

Springboot集成Mybatispuls操作mysql数据库-04

MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强而不做改变。它支持所有MyBatis原生的特性,因此引入MyBatis-Plus不会对现有的MyBatis构架产生任何影响。MyBatis-Plus旨在简化开发、提高效率,…

商务分析方法与工具(七):Python的趣味快捷-异常处理结构

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…

布局全球内容生态,酷开科技Coolita AIOS以硬核品质亮相

当前,全球产业链供应链格局持续重构,成为影响中国对外经济发展的重要因素。2024年4月15至5月5日,历史久、规模大、层次高,作为中国外贸风向标的第135届中国进出口商品交易会(即广交会)在美丽的广州隆重举行…

matlab打开文件对话框

在使用matlab GUI制作时,为了便于用户交互使用,经常设置文件打开对话框,让用户根据实际需要选择打开的文件。下面以打开一张图片为例,matlab代码如下: [temp_filepath,temp_filename]uigetfile(*.jpg,请选择要打开的图…

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

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

如何在Python中调用系统命令或执行外部程序?详细教程来了!

基本原理 在Python中执行程序或调用系统命令是一项非常实用的技能,这允许Python脚本与操作系统进行交互,执行各种外部程序。Python提供了多种方法来实现这一功能,包括os.system(), subprocess模块等。 示例代码 示例1:使用os.s…

LLM生态下爬虫程序的现状与未来

最近出现一批与LLM有关的新的爬虫框架,一类是为LLM提供内容抓取解析的,比如 Jina Reader 和 FireCrawl ,可以将抓取的网页解析为markdown这样的对LLM友好的内容,例如markdown,这类本质上还是传统的爬虫解决方案。还有一…

[C++] const 成员函数

标题:[C] this指针 & const 成员函数 水墨不写bug 正文开始: 目录 (一)Cpp的面向对象编程 (二)this指针 (三)const修饰的成员函数 在正式讲解const修饰成员函数之前&#x…

在做题中学习(55):一维前缀和模板

【模板】前缀和_牛客题霸_牛客网 (nowcoder.com) 题目解释: 注意:下标从1开始的。 l 和 r就是对这n个整数去取一个区间,例如示例一: (1,2) 区间 就是算出1 2 4 中 1,2下标对应值的和,12 3 同理,(2,3) …

vscode正则匹配技巧

写正则表达式 下面是匹配加粗的单词或空格 \*\*[a-zA-Z\s]*\*\*vscode提取加粗的内容 altenter,再ctrlC复制选中的内容出来

前端 | iframe框架标签应用(三)| 点击指定部分,进行外部页面搜索,内置iframe返回搜索结果

文章目录 📚实现效果📚模块实现解析 📚实现效果 点击单词列表内的任意单词↓ 弹出对应单词的搜狗翻译搜索结果,点击关闭按钮关闭界面。 📚模块实现解析 在列表框搜索功能的基础上加一个click触发效果就好了&#xf…

网络安全在数字时代的重要性:以近期网络安全事件为镜

在当今这个信息化爆炸的时代,互联网如同一张无形的网,将我们的生活、工作、学习紧密相连。然而,这张网在带来便捷的同时,也暗藏着无数的安全隐患。近年来,网络安全事件频发,从个人隐私泄露到企业数据被盗&a…

网站未部署证书有何影响,如何解决?

如果您的网站没有ssl证书会有以下风险 1 浏览器标记为不安全 未安装证书的网站在访问时会有不安全的提示弹窗或者在网址栏直接显示不安全 2 影响企业信誉 当用户访问网站时看到不安全提示,会对网站的真实性和安全性产生怀疑,不敢轻易与该企业合作&…

【NodeMCU实时天气时钟温湿度项目 2】WIFI模式设置及连接

第一专题内容,请参考 【NodeMCU实时天气时钟温湿度项目 1】连接点亮SPI-TFT屏幕和UI布局设计-CSDN博客 第三专题内容,请参考 【NodeMCU实时天气时钟温湿度项目 3】连接SHT30传感器,获取并显示当前环境温湿度数据&#…

初探 JUC 并发编程:独占锁 ReentrantLock 底层源码解析

本篇是关于 JUC 并发包中独占锁 ReentrantLock 底层源码的解析,在阅读之前需要对 AQS 抽象队列有基本的了解。 文章目录 1.1 类图结构1.2 获取锁1)void lock() 方法2)void lockInterruptibly() 方法3)boolean tryLock() 方法4&am…

(✌)粤嵌—2024/5/10—删除链表的倒数第 N 个结点

代码实现: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* removeNthFromEnd(struct ListNode *head, int n) {if (head NULL || n 0) {return head;}int i n;struct ListNode …

MySQL·复合查询

目录 基本查询回顾 案例1:查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J 案例2:按照部门号升序而雇员的工资降序排序 案例3:使用年薪进行降序排序 案例4:显示工资最高的员工的名字…
最新文章