大数据面试题 —— 数据库

目录

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

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

相关文章

【MySQL数据库开发设计规范】之命名规范

欢迎点开这篇文章,自我介绍一下哈,本人姑苏老陈 ,是一名JAVA开发老兵。 本文收录于 《MySQL数据库开发设计规范》专栏中,该专栏主要分享一些关于MySQL数据库开发设计相关的技术规范文章,定期更新,欢迎关注&…

每日OJ题_记忆化搜索②_力扣62. 不同路径(三种解法)

目录 力扣62. 不同路径 解析代码1_暴搜递归(超时) 解析代码2_记忆化搜索 解析代码3_动态规划 力扣62. 不同路径 62. 不同路径 难度 中等 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器…

python爬虫(三)之虎嗅网汽车文章爬虫

python爬虫(三)之虎嗅网汽车文章爬虫 闲来没事,闲鱼上有个好兄弟要我从虎嗅网上抓一些汽车文章的爬虫,于是大力出奇迹,我写了一个python程序,将这个网站上所有的汽车文章全部抓取下来了,存储到…

差速机器人模型LQR 控制仿真(c++ opencv显示)

1 差速机器人状态方程构建 1.1差速机器人运动学模型 1.2模型线性化 1.3模型离散化 2离散LQR迭代计算 注意1:P值的初值为Q。见链接中的:

EmploLeaks:一款针对企业安全的组织员工信息收集OSINT工具

关于EmploLeaks EmploLeaks是一款针对企业安全的组织员工信息收集OSINT工具,在该工具的帮助下,企业内部的安全人员和管理员可以有效地收集组织内员工的各种信息,并以此来判断组织内部的网络安全态势。 工作机制 首先,该工具会在…

【管理咨询宝藏100】华为PMO项目管理高管培训方案

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏100】华为PMO项目管理高管培训方案 【格式】PDF版本 【关键词】华为、PMO项目管理、高层培训 【核心观点】 - 深刻理解项目管理的基本概念与方法…

深入了解模拟和存根:提高单元测试质量的关键技术

一、引言 在进行单元测试时,我们经常会遇到对外部资源的依赖,如数据库、网络接口等。模拟(Mocking)和存根(Stubbing)是两种帮助我们模拟这些外部资源,使我们能够在隔离环境中测试单元的方法。在…

【已解决】QT C++中QLineEdit不可粘贴输入

本博文源于生产实际,主要解决LineEdit不可粘贴输入的情况。下面将进行具体分析 问题来源 输入框只能一个个输入,不可复制粘贴。 分析 给QLineEdit装一个监听事件,监听它的事件即可。 问题解决步骤 问题一共分为三步: 书写监…

P8802 [蓝桥杯 2022 国 B] 出差

P8802 [蓝桥杯 2022 国 B] 出差 分析 很明显:单源最短路径 没有负权边 dijkstra 1.存图 2.准备两个数组 dis[]:更新源点到各个点的距离 vis[]:标记是否访问 3.从源点开始,更新源点到与其邻接的点的距离,每次选…

Minio(官方docker版)容器部署时区问题研究记录

文章目录 感慨&概述补充:MINIO_REGION和容器时间的关系 问题一:minio容器和本地容器时间不一致问题说明原因探究解决方法结果验证 问题二:minio修改时间和本地查询结果不一致具体问题原因探究解决办法时间转化工具类调用测试和验证上传文…

etcd单机部署和集群部署

1、etcd单实例部署 对于平常的学习,其实搭建一个单机节点是够了的。接下来就讲讲怎么搭建单机节点。 本次部署是在 centos7 系统,cpu 为amd64 上面进行的。 部署是直接使用官方编译好的二进制文件,大家也可以直接看 ectd-releases 界面选择…

有什么方便实用的黏土特效教程?6个软件教你快速进行特效制作

有什么方便实用的黏土特效教程?6个软件教你快速进行特效制作 作为时尚小达人,你自己是否想要制作出属于自己的黏土特效照片呢?比如下面几种。 看到这些黏土特效软件有没有心动,下面我也为大家详细的介绍一下可以制作出对应特效的…