面试官mysql的索引了解多少,这一次我不会再被问懵了

2023-11-08

mysql数据库我相信基本大部分公司会选择mysql数据库,作为存储引擎。

MySQL 数据库管理系统具有以下系统特性:

  • 使用 C 和 C++ 编写,并使用多种编译器进行测试,保证源代码的可移植性。
  • 支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows 等多种操作系统。
  • 为多种编程语言提供了 API。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
  • 支持多线程,充分利用 CPU 资源。
  • 优化的 SQL 查询算法,有效地提高查询速度。
  • 既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入其他的软件中。
  • 提供多语言支持,常见的编码如中文的 GB 2312、BIG 5,日本的 Shift_JIS 等都可以用作数据表名和数据列名。
  • 提供 TCP/IP、ODBC 和 JDBC 等多种数据库连接途径。
  • 提供用于管理、检查、优化数据库操作的管理工具。
  • 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • 支持多种存储引擎。

了解更多官网:https://www.mysql.com/

 

 

mysql的存储引擎:

MyISAM引擎:

MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。

MyISAM引擎的文件:

.myd 即 my data,表数据文件.myi 即my index,索引文件.log 日志文件。

InnoDB引擎:

事务型数据库的首选引擎,支持ACID事务,支持行级锁定。InnoDB是为处理巨大数据量时的最大性能设计。InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。

InnoDB引擎的文件:

采用表空间(tablespace)来管理数据,存储表数据和索引,InnoDB数据库文件(即InnoDB文件集,ib-file set):ibdata1、ibdata2等:系统表空间文件,存储InnoDB系统信息和用户数据库表数据和索引,所有表共用。.ibd文件:单表表空间文件,每个表使用一个表空间文件(file per table),存放用户数据库表数据和索引。

mysql后面版本默认采用innoDB引擎,原因是innoDB基于B+树存储结构,走聚族索引。

面试官的问题来了:为什么需要使用索引?那你说说mysql的索引原理结构?索引为什么会失效?

为什么使用索引?

索引(Index)是帮助 MySQL 高效获取数据的数据结构。

索引可以帮我快速定位到数据结构的位置,根据查找快速获取数据。

算法地址:

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

数据结构平衡二叉树算法:

平衡二叉查找树,又称 AVL树。 它除了具备二叉查找树的基本特征之外,还具有一个非常重要的特点:它 的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值(平衡因子 ) 不超过1。 也就是说AVL树每个节点的平衡因子只可能是-1、0和1(左子树高度减去右子树高度)。

 

数据结构B树算法

B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运行进行查找、顺序读取、插入和删除的数据结构。B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树。与自平衡二叉查找树不同,B-树为系统最优化大块数据的读和写操作。B-tree算法减少定位记录时所经历的中间过程,从而加快存取速度。

 

数据结构B+树

 

 

 

 

从图中我们看出B+树的特点,算法有一定的顺序,并且节点都是取中间节点,我从A节点一直加到H,那么它的节点顺序是根据中间节点包含关系排列,这样的好处可以减少树的高度搜索,并且相邻子叶节点的数据是可以旋转。

索引失效的原因:

不进行索引查询,不进行索引查询,像like模糊查询为,包含查询,都会进行全表扫描,全索引查询。

同样还有<>、NOT、in、not exists这些查询都是不走索引,全表扫描,因为没有用索引,自然索引就会失效。

索引不存储null值,因为树结构是有序存储的,所以null是无法进行索引查询,也就是找不到索引。

查询条件如果带or查询,查询条件不为主键也会导致索引失效。

结论:

平衡二叉树只有两级节点,由于子节点是没有相邻关系,所以树的高度是很高的,并且不支持旋转查找,B树在平衡二叉树的基础之上增加旋转,支持范围查询。

B+树在B树结构新增相邻子叶节点的关系,所有相邻的叶子节点包含非叶子节点,使用链表进行结合,有一定顺序排序,从而范围查询效率非常高。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试官mysql的索引了解多少,这一次我不会再被问懵了 的相关文章

随机推荐

  • 基于 Flink CDC 高效构建入湖通道

    本文整理自阿里云 Flink 数据通道负责人 Flink CDC 开源社区负责人 Apache Flink PMC Member Committer 徐榜江 雪尽 在 Streaming Lakehouse Meetup 的分享 内容主要分
  • 免费虚拟局域网(VLAN)组建教程

    虚拟局域网 VLAN 是一组逻辑上的设备和用户 这些设备和用户并不受物理位置的限制 可以根据功能 部门及应用等因素将它们组织起来 相互之间的通信就好像它们在同一个网段中一样 由此得名虚拟局域网 虚拟局域网在日常的工作生活中 起着非常大的作用
  • superset的docker安装配置和汉化

    1 docker拉去superset镜像 docker pull amancevice superset 2 启动容器 1 启动容器 docker run d p 8188 8088 name superset v opt docker s
  • 【Latex排版】使用Latex 排版过程中的那些一二三问题汇总

    排版错误问题总结 1 在 maketitle 位置处报错 Missing inserted 2 添加参考文献 编译后显示错误 并且pdf中引用文献处为问号 持续更新问题 近期用Latex整理期刊论文时遇到了不少问题 现把遇到的问题及最终解决
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • React 深度学习:Fiber-ReactFiberLazyComponent

    ReactLazyComponent 包 packages shared ReactLazyComponent js Copyright c Facebook Inc and its affiliates This source code
  • 深入理解线程与并发

    文章目录 计算机硬件与并发 线程与Thread类 线程的特点 线程的优先级 线程控制 总结 个人主页 程序员 小侯 CSDN新晋作者 欢迎 点赞 评论 收藏 收录专栏 Java知识介绍 适用于 Java初学者 希望作者的文章能对你有所帮助
  • go 语言学习笔记 0001 --> iota

    go语言中预置了一个预定义常量 iota 这个东西有个很奇怪的特性 会根据 const 关键字改变值 默认的 iota在const出现的时候会初始化为0 而后不断递加1 直到出现第二个const关键字 const countagn1 2 l
  • java持久层框架mybatis如何防止sql注入

    sql注入大家都不陌生 是一种常见的攻击方式 攻击者在界面的表单信息或url上输入一些奇怪的sql片段 例如 or 1 1 这样的语句 有可能入侵参数校验不足的应用程序 所以在我们的应用中需要做一些工作 来防备这样的攻击方式 在一些安全性很
  • Ubuntu18.04+Docker+Hadoop+Spark分布式集群搭建

    题前记 因为课程需求 下面将搭建过程用学术论文的格式写 其实我并不想写的 没办法 学习作业嘛QAQ 我的联系方式 630056108 文章目录 Docker上的Hadoop大数据平台搭建与测试 1 简介与原理 1 1 Docker介绍 1
  • 电脑安装双系统

    1 准备工具 我们需要安装两个系统 win10和deepin 准备2个u盘 1个u盘使用优启通制作pe 支持uefi启动 1个u盘使用deepin官网上的启动盘制作工具制作启动盘 2 基础知识 2 1 磁盘格式 磁盘格式分为mbr和guid
  • c++: websocket 客户端与服务端之间的连接交互

    目录 socket 头文件 延迟时间 通信协议地址 TCP IP 服务端 客户端 编程步骤 服务端 客户端 编程步骤 1 初始化 WSAStartup 2 创建 socket 2 1 协议族 2 2 socket 类型 2 3 协议 3 绑
  • MS5611气压计 I2C驱动代码 STM32

    文章目录 前言 通信接口 IIC 一 MS5611的5种命令 RESET 重启芯片 READ PROM D1 D2 CONVERSION READ ADC RESULT 二 实现代码 1 初始化 2 读取数据 3 补偿温度数据 前言 这篇博
  • vue3 mitt 替换EventBus

    mitt 在vue3中 on off和 once实例方法已经被移除 我们熟悉的EventBus无法使用 对于这用情况我们使用Mitt库 和EventBus大同小异 1 npm install mitt S 2 mian js ts 初始化
  • C++解决报错无法打开源文件“json/json.h“

    C 解决报错无法打开源文件 json json h 报错详情 解决步骤 1 安装vcpkg 2 安装报错的依赖包 3 在VisualStudio中添加刚才生成的目录 报错详情 解决步骤 1 安装vcpkg https vcpkg io en
  • 【OJ比赛日历】快周末了,不来一场比赛吗? #01.07-01.13 #12场

    CompHub 实时聚合多平台的数据类 Kaggle 天池 和OJ类 Leetcode 牛客 比赛 本账号同时会推送最新的比赛消息 欢迎关注 更多比赛信息见 CompHub主页 或 点击文末阅读原文 以下信息仅供参考 以比赛官网为准 目录
  • 别吹 你不一定会define

    目录 1 define的介绍 1 1 概念 1 2 补充说明 1 3 C语言预处理的三个内容 2 define的使用 2 1 define用于防止头文件重复包含 2 2 define 的定义与撤销 2 2 1 定义 2 2 2 撤销 2 3
  • 数据处理中 男性变为1 女性变为0

    knn train Sex knn train Sex male 1 knn train Sex knn train Sex female 0
  • STM32F103ZET6【标准库函数开发】------02.2 按键实现短按、长按、双击的效果(非中断方式)

    一 硬件介绍 正点原子战舰开发板 LED0 PB5 LED1 PE5 KEY0 PA4 二 实现目的 开机LED0 LED1均熄灭 单击KEY0 LED0点亮 LED1熄灭 双击KEY0 LED0熄灭 LED1点亮 长按 LED0 LED1
  • 面试官mysql的索引了解多少,这一次我不会再被问懵了

    mysql数据库我相信基本大部分公司会选择mysql数据库 作为存储引擎 MySQL 数据库管理系统具有以下系统特性 使用 C 和 C 编写 并使用多种编译器进行测试 保证源代码的可移植性 支持 AIX FreeBSD HP UX Linu