当前位置: 首页 > news >正文

【mysql面试题】mysql复习之常见面试题(一)

 本站以分享各种运维经验和运维所需要的技能为主

《python零基础入门》:python零基础入门学习

《python运维脚本》: python运维脚本实践

《shell》:shell学习

《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战

《k8》从问题中去学习k8s

《docker学习》暂未更新

《ceph学习》ceph日常问题解决分享

《日志收集》ELK+各种中间件

《运维日常》运维日常

《linux》运维面试100问

《DBA》db的介绍使用(mysql、redis、mongodb...)

思考一下问题:

1.数据库三范式是什么?

2.有哪些数据库优化方面的经验?

参考答案:

1.数据库三范式是什么?
数据库的三范式(Normal Forms,简称 NF)是关系数据库设计的基础,它们的目的是减少数据冗余、提高数据完整性,并支持数据库的可扩展性。下面是三范式的定义和解释:### 第一范式(1NF)
第一范式要求表的每一列都是不可分割的基本数据项,即表中的所有字段值都是原子性的。此外,每一行都要有唯一性,通常通过引入一个唯一的行标识符,即主键,来实现。1NF 是设计关系数据库的最基本要求。**示例**:
假设有一个包含学生信息的表,其中一个字段是学生参加的课程。如果这个字段包含多个课程(例如,“数学, 英语”),那么这个表就不符合第一范式。为了符合 1NF,每个课程应该在新的行中单独列出。### 第二范式(2NF)
第二范式建立在第一范式的基础上,要求表必须是第一范式,且所有非主键字段都必须完全依赖于主键。如果一个表的主键是由多个字段组成的复合主键,那么表中的每个非主键字段都必须依赖于整个复合主键,而不是依赖于复合主键的一部分。**示例**:
假设有一个表,其主键由两部分组成:学生ID和课程ID。如果表中还有一个字段是教师名称,而教师名称只依赖于课程ID,而不是学生ID,那么这个设计就不符合第二范式。为了符合 2NF,教师名称应该分离到另一个表中,其中课程ID是主键。### 第三范式(3NF)
第三范式也建立在第一范式的基础上,并且要求表必须首先满足第二范式。此外,第三范式要求所有的非主键字段不仅要完全依赖于主键,而且还必须直接依赖于主键,不能通过其他字段间接依赖(消除传递依赖)。**示例**:
继续上面的例子,假设现在有一个字段是教师的办公室号码,这个字段只依赖于教师名称而不是主键(学生ID和课程ID)。这种设计不符合第三范式,因为教师的办公室号码是通过教师名称这个非主键字段间接依赖于主键的。为了符合 3NF,教师的办公室号码应该移动到教师表中。这三个范式是数据库设计中最常用的范式,它们帮助设计者创建既能避免数据冗余又能提高数据完整性的数据库结构。尽管存在更高级的范式(如 BCNF、4NF 和 5NF),在实际应用中,大多数数据库设计通常满足到第三范式就足够了。2.有哪些数据库优化方面的经验?
数据库优化是一个涉及多个层面的复杂过程,旨在提高数据库系统的性能和效率。优化策略可以从查询优化、索引设计、系统配置、架构设计等多个角度进行。以下是一些常见的数据库优化经验:### 1. 索引优化
- **创建有效的索引**:为常用的查询列和查询条件创建索引可以显著提高查询速度。关键是选择合适的列进行索引,如经常出现在 WHERE 子句、JOIN 条件或ORDER BY 子句中的列。
- **避免过多索引**:虽然索引可以加快查询速度,但每个额外的索引都会增加写操作(INSERT、UPDATE 和 DELETE)的成本。因此,需要平衡读取和写入操作的性能需求。
- **使用覆盖索引**:尽可能使用包含所有查询所需数据的索引,这样可以避免访问表的数据页,减少I/O操作。### 2. 查询优化
- **优化SQL语句**:简化查询逻辑,避免复杂的子查询和不必要的表连接。使用合适的聚合策略和选择性高的条件先行过滤。
- **使用参数化查询**:避免SQL注入攻击的同时,可以帮助数据库重用执行计划,提高查询效率。
- **利用缓存**:对于重复查询相同结果的情况,可以使用查询缓存来避免重复的数据库访问。### 3. 数据库架构优化
- **规范化与反规范化**:根据应用的查询和更新的特点,适当选择规范化(减少冗余、提高数据完整性)和反规范化(提高查询效率,减少JOIN操作)。
- **分区表**:对于非常大的表,可以考虑分区来提高查询性能和数据管理效率。
- **使用适当的数据类型**:选择合适的数据类型不仅可以减少存储空间,还可以加快查询处理速度。### 4. 系统配置优化
- **内存和存储优化**:确保数据库有足够的内存,这对于提高缓存效率和整体性能至关重要。同时,使用高性能的存储解决方案,如 SSD。
- **配置数据库参数**:根据具体的工作负载调整数据库服务器的配置参数,如连接池大小、缓冲区大小、日志级别等。### 5. 性能监控与调整
- **定期监控**:使用工具监控数据库的性能指标,如查询响应时间、锁等待时间、I/O操作等。
- **分析慢查询**:定期分析并优化执行时间长的查询,这些往往是性能瓶颈的来源。
- **容量规划**:根据监控数据进行容量规划,适时扩展硬件资源或优化系统架构。通过实施这些策略,可以显著提高数据库的响应速度和处理能力,从而提高整个应用系统的性能和用户体验。具体更具体的一些优化:
### 1. 使用 `PreparedStatement` 提高性能`PreparedStatement` 相比于 `Statement` 通常能提供更好的性能和安全性,原因包括:- **预编译**:`PreparedStatement` 允许数据库引擎预先编译 SQL 语句,这样当相同的 SQL 语句(只是参数不同)被多次执行时,可以重用已有的执行计划,从而节省了编译时间。
- **减少 SQL 注入风险**:使用 `PreparedStatement` 可以通过绑定参数的方式来插入变量值,这比拼接字符串的方式更安全,有效防止 SQL 注入攻击。
- **提高缓存效率**:由于 SQL 语句在结构上保持不变,只是参数在变化,因此数据库能够更有效地缓存这些语句。### 2. 外键约束对性能的影响外键约束确保了数据库的引用完整性,但它们确实会对插入和删除操作的性能产生影响:- **插入性能**:每次插入数据时,数据库系统需要检查外键约束,确保引用的数据存在。
- **删除性能**:删除操作可能涉及到多个表的级联删除或更新,这增加了操作的复杂性和执行时间。
- **设计选择**:如果应用逻辑能够确保数据的完整性,可以考虑在数据库设计阶段去掉外键约束,以提高性能。但这样做需要非常小心,以避免数据不一致的问题。### 3. 允许适当的冗余在某些情况下,适当的数据冗余可以显著提高查询性能:- **减少 JOIN 操作**:例如,存储回复数量和最后回复时间可以避免每次显示帖子时都要计算这些值。
- **提高数据读取速度**:直接从一个表中读取所有所需信息,而不需要多表查询。### 4. `UNION` vs `UNION ALL`- **去重与性能**:`UNION` 默认去除重复记录,这需要额外的计算来检查和排除重复项,而 `UNION ALL` 不进行去重处理,因此性能通常更高。
- **排序问题**:`UNION` 在合并结果集时可能会进行排序,而 `UNION ALL` 则简单地追加结果集,处理速度更快。在设计和优化数据库时,选择使用 `UNION` 还是 `UNION ALL` 应基于是否需要去重和排序的实际需求。如果数据自然不重复或者应用逻辑确保了数据的唯一性,那么 `UNION ALL` 是一个更高效的选择。总的来说,这些优化策略的选择和应用需要根据具体的业务需求和数据特性来定。理解每种策略的优势和潜在的缺点可以帮助您做出更合适的决策。

相关文章:

【mysql面试题】mysql复习之常见面试题(一)

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…...

VB.NET中如何利用ASP.NET进行Web开发

在VB.NET中利用ASP.NET进行Web开发是一个常见的做法,特别是在需要构建动态、交互式Web应用程序时。ASP.NET是一个由微软开发的开源Web应用程序框架,它允许开发者使用多种编程语言(包括VB.NET)来创建Web应用程序。以下是在VB.NET中…...

vue2+js项目升级vue3项目流程

Vue 3 相较于 Vue 2 在性能、特性和开发体验上都有了显著的提升。升级到 Vue 3 可以让你的项目受益于这些改进。但是,升级过程也需要谨慎,因为涉及到代码的重构和潜在的兼容性问题。 1. 升级前的准备 备份项目: 在开始升级之前,…...

做EDM邮件群发营销时如何跟进外贸客户?

跟进外贸客户是外贸业务中至关重要的一环,需要耐心和策略。以下是一些建议,帮助你有效跟进外贸客户: 充分了解产品: 深入了解自己的产品,包括品质、价格竞争力、适用市场等。 只有对产品有充分的了解,才…...

【Java经典游戏】-01-是男人就坚持30秒

hello!各位彦祖们!我们又见面了!! 今天兄弟我给大家带来了一款经典趣味小游戏的项目案例-是男人就坚持30秒 本项目案例涉及到的技术: Java 语法基础Java 面向对象JavaSwing 编程Java 线程 是一个非常适合小白来加强…...

微调框QSpinBox

作用:允许用户按照一定的步长,来增加或减少其中显示的数值 有两种类型的微调框 QSpinBox - 用于整数的显示和输入QDoubleSpinBox - 用于浮点数的显示和输入 值 包括最大值、最小值、当前值 // 获取和设置当前值 int value() const void setValue(in…...

在线查看 Android 系统源代码 AOSPXRef and AndroidXRef

在线查看 Android 系统源代码 AOSPXRef and AndroidXRef 1. AOSPXRef1.1. http://aospxref.com/android-14.0.0_r2/1.2. build/envsetup.sh 2. AndroidXRef2.1. http://androidxref.com/9.0.0_r3/2.2. build/envsetup.sh 3. HELLO AndroidReferences 1. AOSPXRef http://aospx…...

JavaScript substr() 方法

定义和用法 substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。 <script type"text/javascript">var str"Hello world!" document.write(str.substr(3))</script>lo world!<script type"text/javascript">v…...

教你把图片转换为炫酷的翻页电子杂志

​翻页电子杂志以其炫酷的视觉效果和便捷的阅读方式&#xff0c;受到了许多用户的喜爱。想要把普通的图片转换成这样的效果&#xff0c;其实并不复杂。下面&#xff0c;就让我来为您介绍一下如何操作。 首先&#xff0c;您需要准备一些基本的工具和材料。您需要一个图像编辑软件…...

生信软件35 - AI代码编辑器Cursor

1. Cursor - AI代码编辑器 Cursor的核心功能是利用生成式AI&#xff0c;帮助程序员通过自然语言描述快速生成代码。让程序员未来需要关注的是“做什么”&#xff08;What&#xff09;而不是“怎么做”&#xff08;How&#xff09;&#xff0c;即在使用AI生成代码的基础上&…...

Vue Router 编程式导航全攻略:深入掌握 push, replace, go, back, forward,beforeEach 方法

Vue Router 编程式导航全攻略&#xff1a;深入掌握 push, replace, go, back, forward,beforeEach 方法 在Vue Router中&#xff0c;编程式导航是一种通过JavaScript代码来实现路由跳转的方法。与声明式导航&#xff08;使用<router-link>标签&#xff09;相比&#xff…...

切换淘宝最新镜像源:优化NPM包管理的极致体验

在NPM生态系统中,快速、安全地获取所需的包是每个前端工程师追求的目标。然而,由于不同地区的网络环境,直接通过官方NPM仓库获取包可能会导致下载速度缓慢、超时等问题。针对这些情况,淘宝团队提供了优秀的NPM镜像源,并且定期更新。本文将详尽介绍如何切换淘宝最新镜像源,…...

react 基础语法

前置知识 类的回顾 通过class关键字定义一个类 类名首字母大写 class类有constructor构造器 new 一个类得到一个实例 类还有方法&#xff0c;该方法也会在其原型上 static静态数据&#xff0c;访问静态属性通过 类名.id getter和setter getter&#xff1a;定义一个属性&…...

k8s的NodeIP、PodIP、ClusterIP、ExternalIP

1.NodeIP K8s集群由Master Node与Worker Node组成。 Node&#xff1a;组成k8s集群的机器&#xff0c;可以是物理机或虚拟机。 Master Node &#xff1a;管理节点也叫控制平面主要负责管理控制方面。 Worker Node&#xff1a;&#xff1a;工作节点用于部署处理业务的工作负载或p…...

【vue element-ui】关于删除按钮的提示框,可一键复制

实现效果&#xff1a; Delete: function (id) {this.$confirm(此操作将永久删除该文件, 是否继续?, 提示, {confirmButtonText: 确定,cancelButtonText: 取消,type: warning,center: true,}).then(() > {Delete(id).then(() > {this.$message({type: success,message: 删…...

内部工具使用

1. displaytool 开发的渲染工具&#xff0c;如将车端建图结果显示在渲染窗口中&#xff0c;便于查bug 2. localization / csmap 开发的定位工具 和 车端建图工具 3. bolepack 第三方&#xff0c;处理感知数据的工具 运行流程&#xff1a;1-> 2 -> 3 bol…...

Spring Boot-静态资源管理问题

在Spring Boot中&#xff0c;静态资源管理是构建现代Web应用程序时必不可少的一部分。无论是处理静态页面、图片、CSS、JavaScript文件&#xff0c;还是一些自定义文件&#xff0c;正确管理这些资源能够提升用户体验和优化应用的性能。 1. Spring Boot中的静态资源管理概述 S…...

白酒与商务宴请:如何成为餐桌上的受宠者之一?

在商务宴请的场合中&#xff0c;白酒往往是餐桌上不可或缺的佳酿。一瓶好的白酒&#xff0c;不仅能够彰显主人的品味&#xff0c;还能为宾客带来愉悦的享受。那么&#xff0c;在商务宴请中&#xff0c;如何选择一瓶合适的白酒&#xff0c;让自己成为餐桌上的受宠者之一呢&#…...

【C语言零基础入门篇 - 9】:文件操作

文章目录 文件操作文件的简介指向指针的文件文件的打开方式字符的读取和存储数据的读取和存储 文件操作 文件的简介 一、什么是文件&#xff1f; 文件有不同的类型&#xff0c;主要有两种文件&#xff1a; &#xff08;1&#xff09;程序文件。&#xff08;2&#xff09;数据…...

链式二叉树的基本操作(C语言版)

目录 1.二叉树的定义 2.创建二叉树 3.递归遍历二叉树 1&#xff09;前序遍历 2&#xff09;中序遍历 3&#xff09;后序遍历 4.层序遍历 5.计算节点个数 6.计算叶子节点个数 7.计算第K层节点个数 8.计算树的最大深度 9.查找值为x的节点 10.二叉树的销毁 从二叉树…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...