面试数据库八股文十问十答第十期

面试数据库八股文十问十答第十期

作者:程序员小白条,个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)为什么不推荐多表Join?

多表 Join 在数据库查询中是常见的操作,但在某些情况下可能会导致性能问题:

  • 性能影响: 当连接的表数量增加时,查询性能可能会下降。尤其是当连接的表中有大量数据或者没有合适的索引时,数据库引擎需要执行大量的数据扫描和内存操作,导致查询变慢。
  • 复杂性增加: 多表 Join 可能会导致查询语句变得复杂难以理解和维护。特别是在连接多个表时,需要考虑连接条件、连接顺序等问题,容易出现错误。
  • 并发性问题: 多表 Join 可能导致数据库锁的竞争增加,从而影响系统的并发性能。特别是在高并发场景下,多表 Join 可能会导致数据库资源争夺,降低系统的吞吐量。

因此,尽管多表 Join 是数据库查询中常用的操作,但在实际应用中需要谨慎使用,特别是在大数据量、高并发的场景下,需要考虑查询性能、复杂性和并发性等方面的问题。

2)MySQL 深度分页有什么解决思路?

在处理大数据量的情况下,如果需要进行深度分页(即跳过大量的行再进行查询),传统的 LIMIT offset, limit 查询可能会导致性能问题。因为数据库需要扫描并跳过 offset 行之前的数据,这会导致性能下降。以下是一些解决思路:

  • 使用游标分页: 使用游标进行分页查询,可以避免数据库扫描和跳过 offset 行的问题。通过在每次查询中记录上次查询的最后一条记录的主键或唯一键值,然后基于这个键值进行下一次查询,可以实现高效的分页查询。
  • 使用基于范围的分页: 通过记录上一次查询结果的最后一条记录的值,然后在下一次查询中使用 WHERE 条件限制范围,可以实现高效的分页查询。例如,WHERE id > last_id ORDER BY id LIMIT page_size
  • 使用缓存: 对于静态或者不经常变化的数据,可以将查询结果缓存起来,以提高分页查询的性能。可以使用内存缓存或者分布式缓存来实现。
  • 优化查询语句: 对于复杂的查询语句,可以优化数据库的索引和查询计划,以提高查询性能。可以使用 Explain 或者 Profile 命令来分析查询语句的性能瓶颈,然后针对性地进行优化。

3)如何监控慢 SQL?

监控慢 SQL 对于及时发现和解决数据库性能问题非常重要。以下是一些常用的监控慢 SQL 的方法:

  • 使用数据库性能监控工具: 可以使用数据库性能监控工具来监控数据库的性能指标和慢查询日志,例如 MySQL 的 Performance Schema 或者 Percona Toolkit。
  • 配置慢查询日志: 可以在数据库服务器上配置慢查询日志,记录执行时间超过阈值的查询语句。可以通过分析慢查询日志来发现潜在的性能问题。
  • 使用监控系统: 可以使用监控系统来监控数据库的性能指标和慢查询情况,例如 Prometheus、Datadog 等监控系统。
  • 定期分析和优化: 定期分析数据库的性能指标和慢查询日志,发现潜在的性能问题,并进行优化。可以通过分析查询执行计划、添加索引、优化 SQL 语句等方式来提高查询性能。
  • 实时警报: 可以配置实时警报机制,当发现慢查询或者性能异常时及时发送警报通知相关人员,以便及时处理和解决问题。

综上所述,监控慢 SQL 是数据库性能优化的重要手段,通过合适的监控工具和方法,可以及时发现和解决数据库性能问题,保障系统的稳定性和性能。

4)Delete、Drop、Truncate 有什么区别?

  • DELETE: DELETE 语句用于从表中删除行,但保留表的结构。它会触发表的触发器(如果有的话),并且可以与 WHERE 子句一起使用来指定要删除的行。DELETE 语句执行后,表的空间不会释放,而是会留下被删除行的空间用于后续的插入。
  • DROP: DROP 语句用于完全删除数据库中的表,包括表的结构和数据。执行 DROP 语句后,表的定义以及表中的所有数据都会被永久删除,无法恢复。
  • TRUNCATE: TRUNCATE 语句用于从表中删除所有的行,但保留表的结构。与 DELETE 不同的是,TRUNCATE 语句不会触发表的触发器,并且通常比 DELETE 语句执行得更快,因为它不会记录删除的行。执行 TRUNCATE 后,表的空间会被释放,但表的定义仍然保留。

5)Inner Join、Left Join、Right Join 有啥区别?

  • Inner Join(内连接): Inner Join 返回两个表中匹配行的交集。即只返回两个表中共同满足连接条件的行。如果一个表中没有匹配的行,则不会显示。
  • Left Join(左连接): Left Join 返回左表中的所有行,以及右表中匹配的行。如果右表中没有匹配的行,则会用 NULL 填充。换句话说,无论右表中是否有匹配的行,左表中的每一行都会显示。
  • Right Join(右连接): Right Join 和 Left Join 相反,它返回右表中的所有行,以及左表中匹配的行。如果左表中没有匹配的行,则会用 NULL 填充。换句话说,无论左表中是否有匹配的行,右表中的每一行都会显示。

6)索引失效的场景列举一下

索引失效通常是指数据库查询时,本应使用索引加速查询,但由于某些原因导致索引无法发挥作用,查询性能降低。以下是一些常见的索引失效场景:

  • 未使用索引列: 当查询中的条件不是索引列,或者条件中使用了函数、类型转换等操作时,数据库可能无法使用索引。
  • 使用不等于(!=): 不等于操作符(!=)通常无法利用索引,因为它不是一个范围查询,而是一个非范围查询。
  • 使用 LIKE 操作符: 如果 LIKE 操作符的模式以通配符开头(例如 ‘%value’),索引也无法被利用。但如果模式不以通配符开头(例如 ‘value%’),索引可以被利用。
  • 使用 OR 操作符: 当查询条件中使用 OR 操作符连接多个条件时,如果其中一个条件无法使用索引,整个查询可能都无法使用索引。
  • 表达式索引失效: 当索引列参与了表达式、函数或者类型转换等操作时,索引可能会失效。
  • 隐式类型转换: 当查询条件中的列类型与索引列的类型不匹配,或者类型需要进行隐式类型转换时,索引可能会失效。
  • 统计信息不准确: 如果数据库的统计信息不准确,可能会导致数据库选择错误的执行计划,从而导致索引失效。

综上所述,索引失效可能会导致数据库查询性能下降,因此在设计数据库索引和查询时,需要注意避免以上列举的情况,以确保索引能够发挥应有的作用。

7)怎么查询索引是否被使用

要查看索引是否被查询使用,可以通过数据库的性能监控工具或者执行计划来进行检查。在大多数数据库系统中,可以使用以下方法:

  • 执行计划(Explain): 使用数据库系统提供的 EXPLAIN 或类似的关键字,可以查看查询语句的执行计划。执行计划会显示查询是如何执行的,包括是否使用了索引。
  • 性能监控工具: 大多数数据库系统提供了性能监控工具,可以用来监控数据库的性能指标。这些工具通常会显示每个查询的执行情况,包括是否使用了索引。

8)索引优化的例子举几个

索引优化是提高数据库查询性能的关键。以下是一些常见的索引优化例子:

  • 选择合适的索引类型: 根据查询的特点选择合适的索引类型,如普通索引、唯一索引、组合索引等。
  • 删除不必要的索引: 删除没有使用或者很少使用的索引,以减少索引维护的开销。
  • 创建覆盖索引: 创建覆盖索引可以减少查询的 IO 操作,提高查询性能。
  • 优化索引列顺序: 对于组合索引,将最常用的列放在前面可以提高索引的效率。
  • 避免使用 SELECT *: 尽量避免使用 SELECT * 查询所有列,而是只查询需要的列,以减少索引的使用和 IO 操作。

9)数据库常用引擎有哪些?

常用的数据库引擎包括但不限于:

  • MySQL: InnoDB、MyISAM、Memory、Archive 等。
  • PostgreSQL: PostgreSQL 默认引擎、PostgreSQL 后端引擎。
  • SQL Server: SQL Server 默认引擎、SQL Server 后端引擎。
  • Oracle: Oracle 默认引擎、Oracle 后端引擎。
  • SQLite: SQLite 默认引擎。

不同的数据库引擎具有不同的特点和适用场景,选择合适的引擎取决于具体的需求和情况。

10)数据库事务是什么意思?

数据库事务是指一组数据库操作,要么全部成功执行,要么全部失败回滚,保证数据库的一致性和完整性。事务具有以下四个特性,通常被称为 ACID 特性:

  • 原子性(Atomicity): 事务中的所有操作要么全部执行成功,要么全部失败回滚,不存在部分执行的情况。
  • 一致性(Consistency): 事务在执行前后,数据库的状态应保持一致性。即数据库的完整性约束应得到满足。
  • 隔离性(Isolation): 事务之间应该相互隔离,一个事务的执行不应该影响其他事务的执行。数据库系统需要保证事务之间的隔离性,以避免并发执行时出现问题。
  • 持久性(Durability): 一旦事务提交,其对数据库的修改应该是永久性的,即使发生系统崩溃或断电等故障,数据库的状态也应该能够恢复到事务提交后的状态。

事务可以通过 BEGIN TRANSACTION、COMMIT、ROLLBACK 等语句来控制。在数据库应用中,事务通常用于保证复杂操作的一致性,确保数据的完整性和可靠性。

开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

前后端总计已经 1300+ Star,2W+ 访问!

⭐点赞⭐收藏⭐不迷路!⭐

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

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

相关文章

特征工程技巧—Bert

前段时间在参加比赛,发现有一些比赛上公开的代码,其中的数据预处理步骤值得我们参考。 平常我们见到的都是数据预处理,现在我们来讲一下特征工程跟数据预处理的区别。 数据预处理是指对原始数据进行清洗、转换、缩放等操作,以便为…

Blackwell未来发展之路究竟如何?

英伟达Blackwell如何重塑AI计算的未来? 前言 台湾大学演讲 就在6月2日,英伟达CEO黄仁勋在中国台湾大学综合体育馆发表了最新的演讲。这次黄仁勋的演讲依旧重磅,更值得注意的是这次演讲中还透露了Blackwell今后的发展之路。 介绍Blackwell 介绍…

MongoDB CRUD操作:地理位置查询

MongoDB CRUD操作:地理位置查询 文章目录 MongoDB CRUD操作:地理位置查询地理空间数据GeoJSON对象传统坐标对通过数组指定(首选)通过嵌入文档指定 地理空间索引2dsphere2d 地理空间查询地理空间查询运算符地理空间聚合阶段 地理空…

拿笔记下来!产品采购制造类合同怎样写比较稳妥?

拿笔记下来!产品采购制造类合同怎样写比较稳妥? 近日,几经波折,泰中两国终于完成了潜艇采购谈判!你知道吗?产品制造类合同或协议在起草前如果没有充分考虑各种因素,可能会导致一系列问题和不利…

C语言学习:数据类型

一、 为什么要引入数据类型 • 计算机中每个字节都有一个地址(类似门牌号) • CPU通过 地址 来访问这个字节的空间 0x20001103 1 0 0 1 0 0 1 1 0x20001102 1 1 1 0 1 1 1 0 0x20001101 1 1 1 1 0 1 0 1 0x20001100 0 …

linux c socket编程里SO_REUSEADDR的作用

比如下面的代码 int reuse 1; int ret setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&reuse, sizeof(reuse)); if (ret SOCKET_ERROR) {log_error("_SetReuseAddr failed, err_code%d, fd%d", _GetErrorCode(), fd); }代码解释 setsockopt 函数用于设置…

无人监控视频输出卡顿状态

设计思路,如下: 1.通过采集卡将视频信号输出到个人PC中 2.PC按设置好的时间,视频属性分片保存 3.将步骤2中的视频,按预处理要求,得到待计算的视频片段 4.使用SSIM算法计算预处理后的视频,将计算得到的数据存…

聊天机器人的实践过程

一、语聊机器人 OpenAI 的爆火,到如今也才一年多的时间,然而在过去的一年中,生成式AI的落地场景几乎 80%都是 ChatBot 的形式,那么今天这篇文章我们就来聊一下,生成式AI和IM能擦出怎么样的火花?以及各种场…

p13idea的其他操作

1 导入模块 错误示范: 正确示范: 2 删除模块 必须用delete才能删除干净,用remove删了之后还要回到文件里面把它删除掉

有钱还系统源码 人人还众筹还钱模式还贷系统源码

盈利模式: 1.系统里直推400 2.间推得200 3.升级是隔代匹配200 4.漏单直接设置归系统 5.九级匹配不到直接归平台 有钱还平台新注册会员,即新入的负债者要分9次分别资助先来的11名负债者每人200元,这笔资助不是一次性给到对方&#xff0c…

Prism 入门04,导航功能

当前章节,沿用 上一章使用Prism 框架创建的WPF 项目空模板。在上一章节,各个不同的模块之间能够进行切换并把内容呈现在主程序的页面当中(其实是通过在主程序中注册的区域去发起一个导航的请求,然后跳转到对应的视图。也就是实现了导航跳转功能)。 为什么能实现导航的跳转?…

Mybatis的一级缓存

缓存 MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。MyBatis 3 中的缓存实现的很多改进都已经实现了,使得它更加强大而且易于配置。 Mybatis和Hibernate一样,也有一级和二级缓存,同样默认开启的只有一级缓存,二级缓…

docker-compose安装多环境apollo

下载数据库sql文件 https://github.com/apolloconfig/apollo/blob/master/scripts/sql/src/apolloconfigdb.sql https://github.com/apolloconfig/apollo/blob/master/scripts/sql/src/apolloportaldb.sql 创建库并导入表 #生产环境 mysql> CREATE DATABASE IF NOT EXIS…

脑部磁共振成像肿瘤分割方法(MATLAB 2018)

近年脑肿瘤发病率呈上升趋势,约占全身肿瘤的5%,占儿童肿瘤的70%。CT、MRI等多种影像检查方法可用于检测脑肿瘤,其中MRI应用于脑肿瘤成像效果最佳。精准的脑肿瘤分割是病情诊断、手术规划及后期治疗的必备条件,既往研究者对脑部肿瘤…

Python知识点12---Python的I/O操作

提前说一点:如果你是专注于Python开发,那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了,而如果你和作者一样只是操作其他技术的Python API那就足够了。 Python的流(I/O)操作,最简单的其实就是输入和输出&#x…

扩展翡蜀定理问题

问题描述 给定一个大小为 n n n 的集合 A { a 1 , a 2 ∼ a n } A\{a_1,a_2 \sim a_n\} A{a1​,a2​∼an​},满足条件 gcd ( A ) 1 \text{gcd}(A)1 gcd(A)1。 O ( 1 ) O(1) O(1)时间内 求最大的 k k k ,满足不存在一个大小为 n n n 的非负数集合…

工厂的精益生产如此重要

什么是工厂的精益生产 精益生产(Lean Manufacturing)是一种起源于20世纪50年代日本丰田汽车公司的生产管理哲学。它的核心理念是通过消除生产过程中的浪费,优化流程,提高效率,从而实现成本降低和质量提升。精益生产不仅…

VRTK4.0学习——(二)

手柄绑定以及显示 1.导入CameraRigs.UnityXRPluginFramework 和 CameraRigs.TrackedAlias 预设,将CameraRigs.UnityXRPluginFramework拖入CameraRigs.TrackedAlias的Elements中即可,运行软件后即可看到手柄了 注:如果无法看到手柄&#xff…

MySQL:MySQL执行一条SQL查询语句的执行过程

当多个客户端同时连接到MySQL,用SQL语句去增删改查数据,针对查询场景,MySQL要保证尽可能快地返回客户端结果。 了解了这些需求场景,我们可能会对MySQL进行如下设计: 其中,连接器管理客户端的连接,负责管理连接、认证鉴权等;查询缓存则是为了加速查询,命中则直接返回结…

Linux Shell Script 编写入门

Linux Shell 脚本是一种强大的工具,能够帮助用户自动化任务、简化系统管理以及提高工作效率。本文将带您全面了解如何编写 Linux Shell 脚本,并介绍一些常见的脚本编写技巧和注意事项。 目录 什么是 Linux ShellShell 脚本的基本结构常用 Shell 命令变…