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

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

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

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

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

1)来说说一条 SQL 语句的执行过程?

  1. 词法分析(Lexical Analysis):将 SQL 语句分解为一个个 Token,例如关键字、标识符、操作符等。
  2. 语法分析(Syntax Analysis):验证 SQL 语句的语法是否正确,并生成语法树。
  3. 语义分析(Semantic Analysis):验证 SQL 语句的语义是否正确,例如表、字段是否存在,权限是否足够等。
  4. 查询优化(Query Optimization):根据语义树生成多个查询执行计划,并选择最优的执行计划。
  5. 执行计划生成(Execution Plan Generation):将最优执行计划转换为实际的执行操作序列。
  6. 执行(Execution):执行生成的操作序列,从存储引擎中读取数据、进行计算、返回结果等。

2)MySQL 的存储引擎有哪些?有什么区别?

MySQL 的常见存储引擎包括:

  • InnoDB:默认的存储引擎,支持事务、行级锁、外键等特性,适合于高并发、大数据量的应用。
  • MyISAM:不支持事务和行级锁,但具有较高的读取性能和全文索引的支持,适用于读密集型的应用。
  • MEMORY:将表存储在内存中,读写速度快,但数据不持久化,适用于临时表和缓存等场景。
  • Archive:压缩存储引擎,适合于大量历史数据的存储和查询,但不支持索引和事务。

这些存储引擎在功能特性、性能表现和适用场景上有所区别,选择合适的存储引擎可以提升数据库的性能和可靠性。

3)MySQL 的索引有哪几类?

MySQL 的索引主要分为以下几类:

  • B-Tree 索引:最常见的索引类型,适用于等值查询、范围查询和排序查询。
  • 哈希索引:适用于等值查询,不支持范围查询和排序查询,查询性能稳定但局限性较大。
  • 全文索引:用于全文搜索,适用于文本字段的模糊查询。
  • 空间索引:用于地理空间数据的索引,支持空间数据的查询和分析。

每种索引类型都有自己的适用场景和限制,合理选择和使用索引可以提升数据库的查询性能和效率。

4)聚簇索引和非聚簇索引有什么区别?

  • 聚簇索引(Clustered Index):数据行的物理顺序与索引的逻辑顺序一致。在聚簇索引下,表的数据按照索引的顺序存储,因此一个表只能有一个聚簇索引。InnoDB 存储引擎的主键索引就是一个典型的聚簇索引。
  • 非聚簇索引(Non-clustered Index):索引中保存的是指向数据行的指针,而不是数据行本身。在非聚簇索引下,数据行的物理存储顺序与索引的逻辑顺序不一定一致。一个表可以有多个非聚簇索引,常见的非聚簇索引有普通索引和唯一索引。

5)什么是回表?

回表指的是当通过索引查询获取到了行的主键或聚簇索引,但是需要进一步到数据页中查找其他的列数据时的操作。如果一个查询不能完全通过索引满足,需要通过主键或聚簇索引再去数据页中查询数据,这个过程就称为回表。回表会增加额外的IO操作,影响查询性能,因此在设计索引时需要考虑覆盖索引等优化手段来避免回表操作。

6)什么是最左匹配原则?

最左匹配原则是指,在多列索引中,如果查询条件涉及到了多个列,并且使用了联合索引,那么查询时只能使用索引中的最左边连续的列。也就是说,如果查询条件中使用了索引的前缀列,索引可以被用到;如果查询条件中的列顺序与索引定义的顺序不一致,那么索引就无法被利用到。这个原则是基于 B-Tree 索引的特性而来,对于最左前缀匹配的查询可以快速定位到索引的起始位置,而对于不符合最左匹配原则的查询则需要进行全表扫描或回表操作,影响查询性能。

7)什么叫覆盖索引?

覆盖索引是指一个查询可以完全通过索引的数据就能满足,不需要回表到数据页中去查找其他列的值。当查询所需的列都包含在索引中时,数据库可以直接从索引中获取数据,而不需要额外的回表操作,这样的索引就称为覆盖索引。覆盖索引可以提高查询性能,减少IO操作,特别是对于涉及大量数据的查询。

8)什么叫索引下推?

索引下推(Index Condition Pushdown,简称ICP)是 MySQL 5.6 版本引入的优化特性之一,指的是在使用索引进行查询时,MySQL 可以在索引中对部分不满足查询条件的记录进行过滤,减少回表的次数。具体来说,当查询条件中包含索引的列和非索引的列时,MySQL 可以先利用索引定位到满足索引条件的记录,然后再对非索引列进行过滤,而不是将所有满足索引条件的记录都取出再进行过滤。

9)建索引需要注意什么?

在建立索引时,需要注意以下几点:

  • 选择合适的列:选择经常用于查询条件、连接条件和排序的列建立索引,避免对不常使用的列建立索引,以减少索引的维护开销和存储空间。
  • 避免过多索引:过多的索引不仅增加了存储空间,还会增加查询优化器的选择成本,并且在数据更新时会增加额外的维护开销,因此需要权衡索引的数量和性能提升之间的关系。
  • 使用覆盖索引:尽量建立覆盖索引,避免回表操作,提高查询性能。
  • 注意索引顺序:根据查询的频率和特点选择合适的索引顺序,利用最左匹配原则。
  • 定期维护索引:定期分析索引的使用情况,删除不再使用的索引,优化查询性能。

10)用了索引一定就有用吗?如何排查?

并不是所有情况下使用了索引就一定能提高查询性能,有时候索引可能会导致性能下降,主要有以下几种情况:

  • 数据分布不均匀:如果索引列的数据分布不均匀,可能会导致某些查询只能利用到少量的索引,而大部分数据仍需要进行全表扫描,此时索引的效果不明显。
  • 索引失效:当查询条件中使用了函数、类型转换或者对列进行了计算时,索引可能会失效,导致无法使用索引优化查询。
  • 索引选择不当:选择了不合适的索引,或者建立了过多的索引,都可能导致性能下降。

为了排查索引是否起作用,可以通过以下几种方式进行:

  • 执行计划分析:通过 explain 命令查看查询的执行计划,判断是否使用了索引。
  • 性能测试:对比使用索引和不使用索引的查询性能,观察是否有明显的性能提升。
  • 使用慢查询日志:分析慢查询日志,查找执行时间较长的查询,判断是否存在索引不当的情况。
  • 监控系统资源:通过监控系统资源的使用情况,如CPU、内存、磁盘IO等,判断索引是否对系统资源造成了明显的影响。

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

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

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

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

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

相关文章

leetcode题目238

除自身以外的数组的乘积 中等 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&…

大数据技术Hbase列数据库——topic1

目录 搭建单机版Hbase验证方法一验证方法二 搭建单机版Hbase 验证方法一 使用 jps 命令查看 HMaster 进程是否启动 首先使用xftp 7上传hbase-2.1.0安装压缩包到虚拟机进行解压缩到某一地址,这里解压缩到了上传的路径即/root/software/ tar -zxvf hbase-2.1.0-bi…

进程与线程学习

多线程 tthreading.Thread(targettask,arge(11,)) start()开始 join()等待 主线程在默认情况下会等待所有非守护线程(子线程)结束后才会结束程序。也就是说,如果主线程在结束前没有调用所有…

2025第十届美陈展

展位又遭疯抢!2025第十届美陈展释放“无界之美” 美是全球通用的语言,人类对美的追求始终如一,大众审美在经历了时代的变迁后开始趋同,东方文明深处的美学经济开始崛起。 在如今商业迈入存量阶段,以品牌为突破口打造…

基于 vuestic-ui 实战教程 - 登录篇

1. 简介 登录做为一个系统的门面,也是阻挡外界的一道防线,那在vuestic-ui中如何做登录功能呢。在这里就之间沿用初始版本的Login页面,作为一个演示模板,后续需要改进的读者可以在此篇文章的基础上修改。 2. 登录接口相关api 与 t…

python连接mysql,并整理(去哪儿网)页面数据到表

##引入requests/pymysql模块 本地安装mysql数据库,安装图形化工具navicat import requests from pymysql import Connect#创建客户端连接信息 client Connect(host127.0.0.1,port3306,userroot,password, ) #创建游标 cursor client.cursor() cursor.execute(cre…

17- PHP 开发-个人博客项目TP 框架路由访问安全写法历史漏 洞

常见的php框架:laravel和thinkphp和yii 这里以thinkphp为例 thinkphp目录访问设置 这里只找到了这个3.多的源代码,没找点5.的,凑合一下 链接:GitHub - top-think/thinkphp: ThinkPHP3.2 ——基于PHP5的简单快速的面向对象的PHP…

HTML用法介绍

文章目录 一、HTML概念和模版二、常用标签及用法1.p标签2.span标签3.h标签4.hr标签5.img标签6.a标签7.input标签8.table标签 一、HTML概念和模版 HTML的全称为超文本标记语言&#xff0c;它包括一系列标签组成&#xff0c;模版及各部分注释如下&#xff1a; <!--声明文档类…

ROS基础学习-话题通信机制研究

研究ROS通信机制 研究ROS通信机制 0.前言1.话题通信1.1 理论模型1.2 话题通讯的基本操作1.2.1 C++1.2.2 Python中使用自己的虚拟环境包1.2.2.1 参考11.2.2.2 参考21.2.2.3 /usr/bin/env:“python”:没有那个文件或目录1.2.3 Python1.2.2.1 发布方1.2.2.2 订阅方1.2.2.3 添加可执…

【八股系列】谈谈关于对webpack热更新的原理?

文章目录 1. 热更新原理2. 热更新配置 1. 热更新原理 Webpack 的热模块替换&#xff08;Hot Module Replacement&#xff0c;HMR&#xff09;是一种在不完全刷新页面的情况下更新应用代码的技术&#xff0c;从而提高了开发效率。以下是 HMR 的核心原理&#xff1a; 步骤描述1…

tcpdump抓包,抓包导出.pcap文件用wireshark看

1、抓所有口的包 tcpdump -i any host 设备的ip2、抓特定口的包 tcpdump -i eth2 port 61182 -nne3、将抓到的包导出到pacb文件 tcpdump -i eth2 port 61182 -nne -s0 -w /tmp/61182.pcap -s0: Sets the snapshot length to capture the entire packet. The 0 means that tcpd…

《征服数据结构》目录

我们知道要想学好算法&#xff0c;必须熟练掌握数据结构&#xff0c;数据结构常见的有 8 大类&#xff0c;分别是数组&#xff0c;链表&#xff0c;队列&#xff0c;栈&#xff0c;散列表&#xff0c;树&#xff0c;堆&#xff0c;图。但如果细分的话就比较多了&#xff0c;比如…

go-zero 实战(2)

go-zero 实战&#xff08;1&#xff09; 中&#xff0c;使用了go-zero 创建了order 和 user 两个微服务。而order作为grpc的客户端&#xff0c;user 作为grpc的服务端&#xff0c;打通了 order 到 user的调用。接下来&#xff0c;我们在user中&#xff0c;加入mysql组件。确保数…

我说同事咋找工作命中率这么高,原来是学习了这些招式

最近有两个同事离职了&#xff0c;其中一个还是专科&#xff0c;他俩一个是前端开发&#xff0c;一个是python开发&#xff0c;两个人都接近35岁了。我们还劝告他们&#xff0c;不要离职&#xff0c;要骑驴找马。但了解后&#xff0c;他俩非常有信心的说&#xff1a;不怕&#…

富格林:遵守可信准则安全交易

富格林指出&#xff0c;当下的金融市场&#xff0c;投资者大多都会更倾向于盈利效率高的理财产品&#xff0c;而近年来兴起的现货黄金&#xff0c;正合投资者的心意。不过&#xff0c;投资现货黄金若是不遵循其中的可信准则&#xff0c;是难以实现安全盈利的。那么有哪些可信准…

3D视觉技术|螺栓分拣测试

随着制造业自动化程度的不断提高&#xff0c;某大型汽配企业为提升生产效率、减少人力成本&#xff0c;提出了使用复合机器人完成螺栓分拣的需求。富唯智能通过采用复合机器人&#xff0c;结合3D工业相机和高性能控制器&#xff0c;实现螺栓的自动抓取&#xff0c;从而提升生产…

鸿蒙OS开发:【一次开发,多端部署】(一多天气)项目

一多天气 介绍 本示例展示一个天气应用界面&#xff0c;包括首页、城市管理、添加城市、更新时间弹窗&#xff0c;体现一次开发&#xff0c;多端部署的能力。 1.本示例参考一次开发&#xff0c;多端部署的指导&#xff0c;主要使用响应式布局的栅格断点系统实现在不同尺寸窗…

【Qt 学习笔记】Qt窗口 | 工具栏 | QToolBar的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt窗口 | 工具栏 | QToolBar的使用及说明 文章编号&#xff1a;Qt 学习…

怎么看智慧城市的发展?

智慧城市&#xff0c;就像一个拥有高度智慧和感知能力的未来城市居民&#xff0c;正在不断地学习、适应和进化。它通过无数的眼睛&#xff08;传感器&#xff09;和耳朵&#xff08;数据收集设备&#xff09;来观察和倾听城市的脉动&#xff0c;通过强大的大脑&#xff08;数据…

opencv文档py_contours示例整理

文章目录 目录说明contours_begin目标什么是轮廓?如何画等高线?轮廓逼近法contour_features目标1.Moments 时刻2. Contour Area 轮廓面积3. Contour Perimeter 轮廓周长4. Contour Approximation 轮廓近似5. Convex Hull 凸包6. Checking Convexity 检查凸性7. Bounding Rect…