C/C++工程师面试题(数据库篇)

索引的优缺点

索引是一种支持快速查找特定行的数据结构,如果没有索引,就需要遍历整个表进行查找。用于提高数据检索的速度和效率。

好处:

  1. 提高检索速度: 索引可以加快数据的检索速度,因为它们允许数据库系统直接定位到存储数据的位置,而不必遍历整个数据表。

  2. 优化数据访问路径: 索引可以优化数据访问路径,使得查询更加高效。

坏处:

  1. 占用存储空间: 索引会占用额外的存储空间,特别是对于大型数据集来说,索引可能会占用相当大的空间。

  2. 影响写操作的性能: 当执行插入、更新和删除等写操作时,数据库系统需要更新索引,这可能会影响写操作的性能。

  3. 维护成本高昂: 维护索引需要额外的系统资源和时间成本。随着数据库的增长和索引的数量增加,维护成本可能会变得很高。

数据库索引的底层数据结构

B+树。在数据库中,B+树的高度一般都在2~4层,效率很高。

B+树中,所有记录节点都是按键值的大小顺序存放在同一层的叶子节点,各叶子节点通过指针进行链接。

非叶子节点只存储与搜索有关的key

叶子节点存储数据。从小到大有序,并且使用指针连接在一起。

B+树索引在数据库中的一个特点就是高扇出性。B-tree将数据库拆分成了固定大小的块,通常为4K,块是内部读写的最小单元。这种设计更接近底层硬件,因为磁盘也是以固定大小的块排列的。
问题:如果固定大小的块已经满了该怎么办、

答案:分裂多个块解决,空的空间使用空闲空间。

聚簇索引和非聚簇索引

两者主要区别是数据和索引是否分离。

  • 聚簇索引是将数据与索引存储到一起,找到索引也就找到了数据;
    叶子节点存储真实数据
    非叶子节点存储查询需要的key
    一个表有且仅有一个聚簇索引,并且该索引是建立在主键上的,如果没有主键,会建立在unique列上
  • 而非聚簇索引是将数据和索引存储分离开,索引树的叶子节点存储了数据行的地址。
    其他索引项都是非聚簇索引
    叶子节点存储聚簇索引的key
    非叶子节点存储查询需要的key
    查找会先找到叶子节点,拿叶子节点的聚簇索引的key再去搜索聚簇索引

索引为什么不用哈希表而用 B+ 树

哈希表的查询效率的确最高,时间复杂度O(1),但是它要求将所有数据载入内存,而数据库存储的数据量级可能会非常大,全部载入内存基本上是不可能实现的

索引为什么不用红黑树而用 B+ 树

索引的底层用的并不是二叉树红黑树。因为二叉树和红黑树在某些场景下都会暴露出一些缺陷。
二叉树:在某些场景下会退化成链表,而链表的查找需要从头部开始遍历,而这就失去了加索引的意义。
红黑树:当数据表很多时,会导致索引树的层数很高。索引从根节点开始查找,而如果我们需要查找的数据在底层的叶子节点上,那么树的高度是多少,就要进行多少次查找,并且数据存在磁盘上,访问还需要进行磁盘IO,这会导致效率过低。

提高查询效率的方法

提高查询效率的方法有很多,以下是一些常见的方法:

  1. 索引优化: 通过在经常查询的列上创建索引,可以加快查询速度。

  2. 优化查询语句: 编写高效的查询语句是提高查询效率的关键。避免使用SELECT *,只选择需要的列;避免使用不必要的子查询等。

  3. 内存缓存: 使用缓存技术将热点数据存储在内存中,可以减少数据库访问次数,提高查询速度。

  4. 合适的数据类型: 使用合适的数据类型可以减少存储空间并提高查询效率。例如,选择整数型而不是字符串型存储数字数据。

  5. 定期优化数据库: 定期清理无用数据、重建索引以及收集统计信息等可以提高数据库性能。

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

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

相关文章

Revit-二开之立面视图创建FilledRegion-(3)

在上一篇博客中介绍了FilledRegion的创建方法,这种方法通常只在平面视图中适用,在三维视图中也是无法创建的(目前研究的是这样的,如果有其他方法,请赐教)。 本片文章介绍一个下在立面视图中创建FilledRegion的方法,主要操作是在立面视图中拾取一个点,然后以该点为原点,…

YOLOv5 项目:推理代码和参数详细介绍(detect)

1、前言 本章将介绍yolov5项目的推理函数,关于yolov5的下载和配置环境,参考上一篇文章: YOLOv5 项目:环境配置-CSDN博客 pycharm 中打开的推理模块如红框中所示 pycharm将conda新建的虚拟环境导入,参考 :…

简单实现Transformer的自注意力

简单实现Transformer的自注意力 关注{晓理紫|小李子},获取技术推送信息,如感兴趣,请转发给有需要的同学,谢谢支持!! 如果你感觉对你有所帮助,请关注我。 源码获取:VX关注并回复chatg…

二叉树的右视图,力扣

目录 题目: 我们直接看题解吧: 快速理解解题思路小建议: 审题目事例提示: 解题方法: 解题分析: 解题思路: 代码实现(DFS): 代码1: 补充说明: 代码2&#xff1…

AI:148-开发一种智能语音助手,能够理解和执行复杂任务

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…

[技巧]Arcgis之图斑四至点批量计算

前言 上一篇介绍了arcgis之图斑四至范围计算,这里介绍的图斑四至点的计算及获取,两者之间还是有差异的。 [技巧]Arcgis之图斑四至范围计算 这里说的四至点指的是图斑最东、最西、最南、最北的四个地理位置点坐标,如下图: 四至点…

STM32进阶笔记——复位、时钟与滴答定时器

本专栏争取每周三更新直到更新完成,期待大家的订阅关注,欢迎互相学习交流。 目录 一、复位1.1 软件复位1.2 低功耗管理复位 二、时钟2.1 系统时钟(SYSCLK)选择2.2 系统时钟初始化 三、滴答定时器(Systick)3.1 SysTick部分寄存器3.…

部署bpmn项目实现activiti流程图的在线绘制

本教程基于centos7.6环境中完成 github开源项目: https://github.com/Yiuman/bpmn-vue-activiti软件:git、docker 1. 下载源代码 git clone https://github.com/Yiuman/bpmn-vue-activiti.git2. 修改Dockerfile文件 声明基础镜像,将项目打包&#xff…

EasyRecovery数据恢复软件有什么优势呢?

EasyRecovery数据恢复软件具有以下优势: 强大的恢复能力:EasyRecovery采用先进的扫描和恢复技术,能够深度扫描存储设备,寻找并恢复因各种原因丢失的数据。无论是误删除、格式化、分区损坏还是病毒感染,它都能提供有效…

设计模式(十一)策略模式

请直接看原文:设计模式(十一)策略模式_某移动支付系统在实现账户资金转入和转出时需要进行身份验证,该系统为用户提供了-CSDN博客 ----------------------------------------------------------------------------------------------------------------…

SpringMVC 学习(十一)之数据校验

目录 1 数据校验介绍 2 普通校验 3 分组校验 4 参考文档 1 数据校验介绍 在实际的项目中,一般会有两种校验数据的方式:客户端校验和服务端校验 客户端校验:这种校验一般是在前端页面使用 JS 代码进行校验,主要是验证输入数据…

文物预防性保护系统方案的需求分析

没有文物保存环境监测,就不能实施有效的文物预防性保护。因此要建立文物预防性保护体系,一定要先有良好的文物状态监测制度,进而进行科学有效的文物保护管理。所以,导入文物预防性保护监测与调控系统,首先就是要针对文物进行全年温度、湿度、光照等关键参…

使用Zint库生成一维码/条形码

下面代码是是使用 Zint 库生成 Code 128 类型的条形码&#xff0c;并将生成的条形码保存为 output.bmp 文件。下面是对代码的详细解释&#xff1a; #include 和 #include <zint.h>&#xff1a;这两行代码包含了所需的头文件&#xff0c;分别是标准输入输出流的头文件和 Z…

LeetCode---【链表的操作】

目录 206反转链表【链表结构基础】21合并两个有序链表【递归】我的答案【错误】自己修改【超出时间限制】在官方那里学到的【然后自己复写,错误】对照官方【自己修改】 160相交链表【未理解题目目的】在b站up那里学到的【然后自己复写,错误】【超出时间限制】对照官方【自己修改…

(C语言)qsort函数模拟实现

前言 我们需先了解qsort函数 qsort函数详解&#xff1a;http://t.csdnimg.cn/rTNv9 qsort函数可以排序多种数据类型&#xff0c;很是神奇&#xff0c;这是为什么&#xff0c;我们在里模拟实现这样的功能 目录 1. qsort函数模拟实现 2. 我们使用bubble_sort函数排序整形数…

Sunshine v0.21.0 安装卡住,闪退的问题解决

上期博客讲了如何利用 Sunshine 和 Moonlight 实现 iPad 当作 Windows 副屏&#xff0c;用官方 Windows installer 安装 Sunshine 过程中&#xff0c;遇到了安装卡住&#xff08;这个是因为需要国外网络环境&#xff09;&#xff0c;安装后运行闪退的问题。 Sunshine 下载地址…

OpenCV 4基础篇| OpenCV图像的裁切

目录 1. Numpy切片1.1 注意事项1.2 代码示例 2. cv2.selectROI()2.1 语法结构2.2 注意事项2.3 代码示例 3. Pillow.crop3.1 语法结构3.2 注意事项3.3 代码示例 4. 扩展示例&#xff1a;单张大图裁切成多张小图5. 总结 1. Numpy切片 语法结构&#xff1a; retval img[y:yh, x…

以目标检测和分类任务为例理解One-Hot Code

在目标检测和分类任务中&#xff0c;每一个类别都需要一个编码来表示&#xff0c;同时&#xff0c;这个编码会用来计算网络的loss。比如有猫&#xff0c;狗&#xff0c;猪三种动物&#xff0c;这三种动物相互独立&#xff0c;在分类中&#xff0c;将其中任意一种分类为其他都同…

YOLOv9独家原创改进|使用可改变核卷积AKConv改进RepNCSPELAN4

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 AKConv是一种具有任意数量的参数和任意采样形状的可变卷积核&#xff0c;对不规则特征有更好的提取效果。 RepNCSPELAN4是YOLOv9中的…

2023年12月CCF-GESP编程能力等级认证Scratch图形化编程四级真题解析

一、单选题(共15题,共30分) 第1题 现代计算机是指电子计算机,它所基于的是( )体系结构。 A:艾伦图灵 B:冯诺依曼 C:阿塔纳索夫 D:埃克特-莫克利 答案:B 第2题 默认小猫角色,执行下列程序,以下说法正确的是? ( ) A:舞台上会出现无数个小猫 B:舞台只会出现…