首页 > 数据库 >数据库面试高频题目 - 深度解析 MySQL:探秘关系型数据库的核心技术(一)

数据库面试高频题目 - 深度解析 MySQL:探秘关系型数据库的核心技术(一)

时间:2024-03-23 12:32:50浏览次数:31  
标签:记录 数据库 节点 索引 innodb MySQL c2 探秘 主键

      本文将深入探讨 MySQL,这是关系型数据库中的核心技术,被广泛应用于数据存储和管理。透过高频面试题解析,我们将深入研究 MySQL 在数据建模、查询优化和事务处理中的作用。无论你是初学者还是渴望加深对关系型数据库技术的了解,本文都将为你提供实用的面试准备。

一、innodb索引和myisam索引的区别

1、myisam的所有方式都是非聚簇的,innodb的索引方式有一个是聚簇的。

2、在innodb存储引擎中,我们只需要根据主键对聚簇索引进行一次查找就能找到对应的记录。而myisam索引文件中确需要进行一次回表操作,意味着myisam中建立的索引相当于全部都是二级索引。

3、innodb的数据文件本身就是索引文件,而myisam索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。

4、innodb的非聚簇索引data域记录的是主键值,而myisam索引记录的是地址。

5、myisam的回表操作非常快快速,因为是拿着地址偏移量直接到文件中取数据的,而innodb是通过获取主键之后再去聚簇索引里找记录,虽然也不慢,但比不上直接用地址去访问。

6、innodb要求必须有主键,myisam可以没有。如果没有显示指定,则mysql系统会自动选择一个非空且唯一标识数据记录的列作为主键,如果不存在这种列,mysql自动为innodb表生成一个隐含自动作为主键。

二、B+树索引实现原理

三、什么是自适应哈希索引

       自适应哈希索引是innodb引擎的一个特殊功能,当它注意到某些索引值被使用的非常频繁时,会在内存中基于b树再创建一个哈希索引,这就让b树索引也具有hash索引的一些特点。

四、聚簇索引和非聚簇索引b+树实现有什么区别

1、聚簇索引

(1)特点

        索引和数据保存在同一个b+树;

        页内的记录是按照主键的大小顺序排成一个单向链表;

        页与页之间也是根据页中记录主键的大小顺序排成一个双向链表;

        非叶子节点存储的是记录的主键+页号;

        叶子节点存储的是完整的用户记录。

(2)优点

        数据访问更快,因为索引和数据保存在同一个B+树中

        聚簇索引对于主键的排序查找和范围查找速度非常快

2、非聚簇索引

        聚簇索引只有在搜索条件是主键值时才发挥作用,因为b+树中的数据都是按照主键进行排序的,如果我们想以别的列作为搜索条件,那么需要创建非聚簇索引。例如以c2列作为搜索条件,,那么需要使用c2列创建一个b+树。

   特点:

        页内的记录是按照从c2列的大小顺序排列成一个单向链表;

        页于页之间也是根据页中记录的c2列大小的顺序排成一个双向列表;

        非叶子节点存储的是记录的c2列+页号;

        叶子节点存储的并不是完整的记录,而是c2列+主键这两个列的值;

        一张表可以有多个非聚簇索引。

五、平衡二叉树,红黑树,b树和b+树的区别是什么

1、平衡二叉树

        基础数据结构,左右平衡,高度差大于1会自旋,每个节点记录一个数据

        特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1;并且左右两个子树都是一棵平衡二叉树

2、红黑树

        hashmap存储;两次旋转达到平衡;分为红黑节点;红黑树的长子树只要不超过短子树的两倍即可;

        节点非黑即红;根节点是黑色,所有null节点成为叶子节点,且认为颜色为黑;所有红节点的子节点都为黑色;

        从任一节点到其叶子节点的所有路径上都包含相同数目的黑节点。

3、b+树和b树的差异

(1)b+树中非叶子节点的关键字也会同时存在在子节点中,并且是在子节点中所有关键字的最大值(或最小值)

(2)b+树中非叶子节点仅用于索引,不保存数据记录,跟记录有关的信息都放在叶子节点中。而b树中,非叶子节点既保存索引,也保存数据记录

(3)b+树中所有关键字都在叶子节点出现,叶子节点构成一个有序链表,而且叶子节点本身按照关键字的大小从小到大顺序链接

六、非聚簇索引为什么不存数据地址值而存储主键

        聚簇索引中有时会引发分页操作、重排操作数据有可能会移动

七、复合索引创建时字段顺序不一样使用效果一样吗

1、先把各个记录和页按照c2列进行排序

2、在记录的c2列相同的情况下,采用c3列进行排序

3、b+树叶子节点的记录由c2、c3列和主键c1列组成

4、本质上也是二级索引

八、索引类型

1、主键索引:列设为主键后会自动建立索引,唯一且不能为空

2、唯一索引:索引列值必须唯一,允许由null值

3、普通索引:既不是主键,列值也不需要唯一

4、复合索引:一个索引包含多个列

九、什么时候适合创建索引,什么时候不适合创建索引

1、适合创建索引

        频繁作为where条件语句查询字段

        关联字段需要建立索引

        排序字段可以建立索引

        分组字段可以建立索引

        统计字段可以建立索引

2、不适合创建索引

        频繁更新的字段不适合建立索引

        where,分组,排序中用不到的字段不必要建立索引

        可以确定表数据非常少不需要建立索引

        参与mysql函数计算的列不适合建立索引

十、索引下推

1、未开启索引下推

        根据筛选条件在索引树中筛选第一个条件

        获得结果集后回表操作

        进行其他条件筛选

        再次进行回表操作

2、开启索引下推

        在条件查询时,当前索引树如果满足全部筛选条件,可以在当前树中完全全部筛选过滤,得到比较小的结果集再进行回表操作

十一、有哪些情况会造成索引失效

1、like以%,_开头索引失效

2、不等于(!= 或者<>)索引失效

3、is not null索引失效

4、类型转换导致索引失效

5、复合索引未用左列字段失效

6、如果mysql觉得全表扫描更快时(数据少)索引失效

十二、多个索引优先级是如何匹配的

        主键匹配、全值匹配、最左前缀匹配、范围匹配、索引扫描、全表扫描

若有收获,就点个赞吧

标签:记录,数据库,节点,索引,innodb,MySQL,c2,探秘,主键
From: https://blog.csdn.net/qq_62066048/article/details/136964486

相关文章

  • MySQL中行级锁与表级锁与页级锁的区别
    #       再次复习MyISAM和InnoDB存储引擎时,发现两个存储引擎的区别包括MyISAM只支持表级锁,而InnoDB还支持行级锁,因为没有系统的了解过锁的概念,因此花了点时间进行了初步的学习,若有不对之处,望有指正;#简单回忆MyISAM与InnoDB区别MyISAM是5.5版之前,由于其缺陷明显......
  • 【黄啊码】如何用GPT和向量数据库做问答型AI
    知识库服务依赖该数据库,Embedding形式个性化训练ChatGPT,必不可少的就是向量数据库因为qdrant向量数据库只支持Docker部署,所以需要先安装好Docker服务。命令行安装拉取镜像dockerpullqdrant/qdrant运行服务dockerrun-d-p6333:6333qdrant/qdrant宝塔面板下......
  • Mysql默认字符集修改
    0.查看自己的字符集配置mysql-uroot-p123456-e"showcharacterset\G;"查看所有的字符集查看常用的字符集:mysql-uroot-p123456-e"showcharacterset\G;"|egrep"gbk|utf8|latin1"|awk'{print$0}'查看MySQL当前的字符集mysql>showvariables......
  • Mysql中备份数据文件中/*!*/的含义
    1.问题在备份数据库时,我们发现生成的备份文件中,存在这样一系列代码:/*!40101SET@OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT*/;/*!40101SET@OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS*/;/*!40101SET@OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTIO......
  • C++结构体内幕揭秘:sizeof之谜与内存布局探秘
     概述:C++结构体的`sizeof`不总是等于每个成员的`sizeof`之和,因为对齐和填充影响了内存布局。未对齐的结构体可能存在间隙,而对齐的结构体会插入填充以保持对齐。通过示例展示了结构体的内存对齐和填充,以及如何使用模板元编程打印结构体成员的偏移量,深入理解内存布局。在C++中,......
  • innodb_undo_tablespaces导致Mysql启动报错
    1.问题MySQL5.7设置innodb_undo_tablespaces=2报错如下:2020-06-09T04:40:07.800321-05:000[ERROR]InnoDB:Expectedtoopen2undotablespacesbutwasabletofindonly0undotablespaces.Settheinnodb_undo_tablespacesparametertothecorrectvalueandret......
  • django《大学计算机》课程思政资源共享平台(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在当今信息化社会,教育领域正逐渐实现数字化转型,其中课程资源的共享与利用成为提高教学效率和质量的关键。特别是对于《大学计算机》这类基础且重要的课程,构......
  • django+Mybatis的医生在线诊所平台(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的迅猛发展和普及,越来越多的传统行业开始向数字化转型。医疗健康领域作为与人们生活密切相关的行业,其服务模式也正逐渐从传统的面对面诊疗转......
  • djangoJAVA汽车年审管理系统(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着汽车产业的快速发展,汽车已经成为人们日常生活中不可或缺的交通工具。然而,随着汽车数量的增加,汽车安全问题也日益凸显。为了确保道路交通安全,各国政府都......
  • 【附源码】django计算机毕业设计web的房屋租赁系统的设计与实现(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着经济的发展和社会的进步,人们对于居住环境的需求越来越高。房屋租赁市场作为房地产市场的重要组成部分,近年来呈现出快速发展的态势。然而,传统的房屋租赁......