150道MySQL高频面试题,学完吊打面试官--如何实现索引机制

news2024/11/27 10:25:08

前言

本专栏为150道MySQL大厂高频面试题讲解分析,这些面试题都是通过MySQL8.0官方文档和阿里巴巴官方手册还有一些大厂面试官提供的资料。
MySQL应用广泛,在多个开发语言中都处于重要地位,所以最好都要掌握MySQL的精华面试题,这也是面试官最喜欢问的,现在面试官在面试的时候更关心的是某个技术点的深度,所以专栏的内容也会从底层开始讲解,本专栏会一直不断的进行更新,欢迎大家一起交流学习。

在这里插入图片描述上图就是当前MySQL主流面试题的几个方向,本篇为索引篇

MySQL如何实现索引机制

索引的基本概念

索引是数据库表中一列或多列值的排序列表,通过索引可以更快地查找表中的记录。索引主要分为以下几类:

  • 主键索引(Primary Key Index):主键是表中每行记录的唯一标识,因此主键索引也是唯一的。
  • 唯一索引(Unique Index):类似于主键索引,但允许有一个空值(NULL)。
  • 普通索引(Normal Index):最基础的索引,没有任何限制。
  • 全文索引(Full-Text Index):用于全文搜索,只能在CHAR、VARCHAR和TEXT类型列上创建。
  • 组合索引(Composite Index):在表的多个列上创建索引,以提高基于这些列的查询性能。

索引的存储类型

MySQL支持多种存储引擎,不同存储引擎的索引实现机制可能有所不同。以最常用的InnoDB存储引擎为例,它主要使用B+树来存储索引。

  • B+树索引:InnoDB默认使用B+树来实现索引。B+树是一种平衡树,叶子节点之间通过链表相连,非常适合范围查询和顺序扫描。
  • 哈希索引:在某些情况下,可以使用哈希索引来提高查找速度,但哈希索引不支持范围查询。哈希索引一般是配合B+树索引一起使用的,但是哈希索引不能通过手动创建出来,是由系统自动生成。
  • 全文索引:InnoDB也支持全文索引,使用倒排索引结构,主要用于全文搜索。

而经常使用的就是B+树索引结构,B+树索引结构是一种树形数据结构。

B+树和二叉树的区别

B+树和二叉树都是树形数据结构,但它们在结构、特性和应用场景上存在显著差异。

B+树

B+树是一种平衡多路查找树,是B树的一种变体。它的特点包括:

  • 结构:B+树由根节点、内部节点和叶子节点组成。每个节点可以有多个子节点,且内部节点仅包含索引信息,不包含实际数据。所有数据都保存在叶子节点中,并且叶子节点之间通过指针相连,形成一个有序链表。
  • 特性:B+树能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。由于内部节点不保存数据,所以能在内存中存放更多索引,增加缓存命中率。另外,因为叶子节点相连,遍历操作很方便,而且数据也具有顺序性,便于区间查找。
  • 应用场景:B+树常用于数据库和操作系统的文件系统中,如NTFS、ReiserFS、XFS等文件系统都在使用B+树作为元数据索引。

二叉树

二叉树是一种每个节点最多有两个子节点的树形数据结构。它的特点包括:

  • 结构:二叉树由根节点和若干子节点组成,每个节点最多有两个子节点,分别称为左子节点和右子节点。
  • 特性:二叉树可以是平衡的,也可以是不平衡的。平衡二叉树通过保持树的平衡来提高查找效率。二叉搜索树(BST)是一种特殊的二叉树,其中左子树的所有节点值小于根节点值,右子树的所有节点值大于根节点值。这种结构使得二叉搜索树的查找效率接近二分查找。
  • 应用场景:二叉树广泛应用于各种算法和数据结构中,如二叉搜索树、平衡二叉树(如AVL树、红黑树等)等。它们常用于实现集合、映射、优先级队列等数据结构,并在搜索、排序、插入和删除等操作中表现出色。

区别

  • 结构差异:B+树是平衡多路查找树,每个节点可以有多个子节点;而二叉树是每个节点最多有两个子节点的树形数据结构。
  • 内部节点存储内容:B+树的内部节点仅包含索引信息,不包含实际数据;而二叉树的节点通常包含关键字和对应的数据值(在二叉搜索树中,节点还包含指向子树的指针)。
  • 叶子节点连接方式:B+树的叶子节点通过指针相连,形成一个有序链表,便于区间查找和遍历;而二叉树的叶子节点通常不直接相连。
  • 应用场景:B+树常用于数据库和文件系统的索引结构中,因其良好的平衡性和有序性而适合大规模数据的查找和遍历;而二叉树则广泛应用于各种算法和数据结构中,如集合、映射、优先级队列等。

索引的创建和使用

在MySQL中,可以通过CREATE INDEX语句来创建索引。

CREATE INDEX idx_user_name ON users(name);

这将在users表的name列上创建一个名为idx_user_name的普通索引。

主键索引和唯一索引可以在创建表时通过PRIMARY KEY和UNIQUE关键字定义,也可以在表创建后通过ALTER TABLE语句添加。

索引的维护

索引的维护包括更新、删除和重建索引等操作。当表中的数据发生变化时,索引也需要相应地更新。因此,频繁更新数据可能会影响索引的性能。

更新索引:

MySQL会自动在数据更新时更新相关索引。

删除索引:

可以通过DROP INDEX语句删除不再需要的索引。

DROP INDEX idx_user_name ON users;

重建索引:

在某些情况下,重建索引可以提高查询性能。可以使用OPTIMIZE TABLE语句来重建表的物理结构和索引。

索引的分类及实现方式

MySQL中的索引根据其功能和结构可分为以下几类:

主键索引

  • 功能:确保表中每条记录的唯一性,不允许有空值。
  • 实现方式:通常在创建表时设置,MySQL会自动为该列创建主键索引,不需要手动创建。在InnoDB存储引擎中,主键索引是聚簇索引,叶子节点存放的是主键值和数据行本身。

单列索引(普通索引)

  • 功能:仅对单个列创建索引。
  • 实现方式:一个表可以拥有多个单列索引。可以通过CREATE INDEX语句手动创建。

联合索引(组合索引)

  • 功能:将多个单列索引组合在一起,形成的多列索引,可以提高多条件查询的效率。
  • 实现方式:在创建表或修改表时,通过指定多个列来创建联合索引。

唯一索引

  • 功能:要求索引列的值必须唯一,但允许有空值。对于联合唯一索引,要求列值的组合唯一。
  • 实现方式:可以通过CREATE UNIQUE INDEX语句手动创建。

外键索引

  • 功能:主要用于InnoDB存储引擎,确保数据一致性、完整性,支持级联操作。
  • 实现方式:通过添加外键约束来实现。

BTree索引

  • 功能:最常用的索引结构,适用于大多数查询场景。
  • 实现方式:InnoDB和MyISAM存储引擎都默认使用基于B+Tree的索引结构。B+Tree索引具有平衡性,能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。

Hash索引

  • 功能:基于哈希表实现,适用于精确查询,但不支持范围查询。
  • 实现方式:Memory存储引擎默认使用的索引结构。

R-tree索引(空间索引)

  • 功能:主要用于处理地理空间数据类型,如GIS应用。
  • 实现方式:MyISAM引擎中的一种特殊索引。

Full-text索引(全文索引)

  • 功能:用于全文检索,快速匹配大文本的内容。
  • 实现方式:MyISAM引擎原生支持,InnoDB在5.6版本后也开始支持此类型的索引,主要用于文本字段中的关键字搜索。

InnoDB存储引擎中的索引特性

聚簇索引

  • 特点:叶子节点存放的是主键值和数据行本身。在InnoDB存储引擎中,主键索引是聚簇索引。
  • 优势:数据访问更快,因为聚簇索引将数据行和索引保存在同一棵B+树中。
  • 劣势:插入性能受顺序影响,乱序插入会导致页面分裂,影响性能;更新主键代价高,因为数据行会被移动。

辅助索引

  • 特点:InnoDB存储引擎中的辅助索引是聚簇索引之外的非聚簇索引,例如复合索引、前缀索引等。叶子节点存储的是主键值,而不是数据行本身。
  • 访问方式:需要二次查找才能获取数据。首先通过辅助索引找到主键值,然后使用主键值通过聚簇索引找到对应的数据页,最后在数据页中通过二分法查找到具体的数据行。

二级索引的扩展

  • 特点:InnoDB的二级索引会自动补齐主键,将主键列追加到二级索引列后面。这样做可以减少大量的二级索引维护工作,因为当数据行移动或者发生页分裂的时候,无需更新二级索引。
  • 优化:在设计主键的时候,常见的一条设计原则是要求主键字段尽量简短,以避免二级索引过大(因为二级索引会自动补齐主键字段)。

在这里插入图片描述

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

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

相关文章

基于Matlab 模拟停车位管理系统【源码 GUI】

系统对进入停车位的车辆进行车牌识别,将识别出来的车牌号显示出来;然后对车主进行人脸识别,框出车主照片的人脸部分作为车主信息的标记,记录在系统库中。车辆在库期间,系统使用者可以随意查看车辆与车主信息的获取过程…

微信小程序 https://pcapi-xiaotuxian-front-devtest.itheima.net 不在以下 request 合法域名

微信小程序在调用接口的时候出现以上报错,接口没有问题,是因为小程序自动校验了合法域名 打开本地设置: 勾选不校验合法域名,即可 效果如下:

数据治理,数据提取,大数据中心建设,大数据治理总体解决方案书(word,ppt原件)

1. 数据管理的现状 2. 数据治理的概述 1.1数据治理概念 2.2数据治理目标 3. 数据治理体系 4. 数据治理核心领域 1.1 数据模型 1.2 数据生命周期 (1)数据生成及传输 (2)数据存储 (3)数据处理和应用…

电机控制储备知识 二:电磁学理论知识

一:磁场的发现过程和和一些实验现象 古代发现:公元前七世纪,中国和古希腊的学者就已经发现了磁石。 吉尔伯特的研究:1600年,英国女王御臣威廉吉尔伯特(William Gilbert)发表了《地磁论》&#…

Java:数组的定义和使用(万字解析)

目录 1. 数组的概念 2. 数组的基础知识 2.1 数组的创建 \1. 基础创建格式: \2. 类似C语言的创建格式: 【错误的创建(初始化)格式】 2.2 数组的数据类型 2.3 数组的初始化 —— 两种方式 \1.动态初始化:(完全默认初始化) \2. 静态初…

ProLightsfx新的出发–从CSDN到WordPress

原文链接:ProLightsfx新的出发--从CSDN到WordPress_ProLightsfx的技术分享 (https://www.prolightsfxjh.com/article/article-new-start/) 大概有差不多2年时间没有在csdn发布文章了。可能主要是最近几年工作有些疲惫、精神有些懈怠&#xff…

【react】Redux基础用法

1. Redux基础用法 Redux 是一个用于 JavaScript 应用的状态管理库,它不依赖于任何 UI库,但常用于与 React 框架配合使用。它提供了一种集中式的状态管理方式,将应用的所有状态保存在一个单一的全局 Store(存储)中&…

VMware虚拟机Debian扩展磁盘

一、 版本 VMware:Workstation 17 Pro虚拟机:Debian11 二、 VMware虚拟机扩展 虚拟机关机状态快照或者备份:以免扩容失败导致文件丢失虚拟机——设置——硬盘——磁盘使用工具——扩展——扩展磁盘容量——设置为想要的大小 三、 虚拟机…

软件设计师-上午题-16 算法(4-5分)

算法题号一般为62-65题(数据结构与算法题号为57-65,共9分),分值一般为4-5分。 目录 1 回溯法 1.1 N皇后问题 1.2 非递归求解N皇后问题 1.3 递归求解N皇后问题 1.4 真题 2 分治法 2.1 最大字段和问题 2.2 真题 3 动态规划 3.1 0-1背包问题 3.…

【react如何在chrome浏览器里面调试?】

react如何在chrome浏览器里面调试? 1. 首先在在工作区关联源码 2. 安装react的chrome插件。 3. 切换到插件的标签,然后选中你要调试的页面元素,再点击右边的按钮,切换到对应的源码 4. 可以在源码任意位置打断点运行。

【Mysql NDB Cluster 集群(CentOS 7)安装笔记一】

Mysql NDB Cluster 集群(CentOS 7)安装笔记 NDB集群核心概念 NDBCLUSTER(也称为NDB)是一个内存存储引擎,提供高可用性和数据保存功能。 NDBCLUSTER存储引擎可以配置一系列故障转移和负载平衡选项,但从集群级别的存储引擎开始是最容易的。NDB集群的NDB存储引擎包含一整套…

在Microsoft Outlook日历中添加多个时区

在Microsoft Outlook日历中添加多个时区 1.单击Outlook中的文件选项卡,单击选项 2.左侧菜单中选择日历 3.向下滚动到时区部分,并标记当前时区,比如China 4.选中“显示第二个时区”框 5.选择第二个时区并给它一个标签,比如Germa…

考公人数攀升?地信、测绘、地质、遥感等专业,能报考哪些单位

近年来,考公人数持续飙升,国考报名人数更逐年攀升。2025年国家公务员考试共有341.6万人通过资格审查,报录比达86:1。国考报名人数再创新高。 国家公务员考试时间安排 地理学相关岗位分析 地信属于地理科学类,测绘类中不包括地信&…

大华乐橙设备私有平台EasyCVR视频设备轨迹回放平台支持哪些摄像机?摄像机如何选型?

在现代安全监控系统中,视频监控设备扮演着至关重要的角色。视频设备轨迹回放平台EasyCVR以其卓越的兼容性和灵活性,支持接入多种品牌和类型的摄像机。这不仅为用户提供了广泛的选择空间,也使得视频监控系统的构建和管理变得更加高效和便捷。本…

PyCharm中pylint安装与使用

目录 1. 安装插件2. pycharm中使用该功能3. 命令行使用 1. 安装插件 然后重启 2. pycharm中使用该功能 3. 命令行使用 前提是先 pip install pylint pylint demo01.py下面红框内容的意思是,得到10分/ 满分10分,上次运行获得8.33分,经调整…

客户服务数据分析:洞察客户需求,优化服务策略

在数字经济时代,数据已成为企业决策的重要依据。特别是在客户服务领域,通过深度挖掘和分析客户服务数据,企业能够更精准地洞察客户需求,优化服务策略,从而提升客户满意度和忠诚度,增强市场竞争力。 一、客户…

【Python】Python自习课:第一个python程序

【Python】Python自习课:第一个python程序 示例

大模型中的token是什么;常见大语言模型的 token 情况

目录 大模型中的token是什么 常见大语言模型的 token 情况 大模型中的token是什么 定义 在大模型中,token 是文本处理的基本单位。它可以是一个字、一个词,或者是其他被模型定义的语言单元。简单来说,模型在理解和生成文本时,不是以完整的句子或段落为单位进行一次性处理…

ONLYOFFICE 8.2版本产品评测——遥遥领先,助力自动化办公

ONLYOFFICE 产品测试体验报告总结 知孤云出岫-CSDN博客 目录 产品介绍——篇【1】 一.关于 ONLYOFFICE 桌面编辑器 二.关于 ONLYOFFICE 协作空间 三.关于 ONLYOFFICE 文档 四.关于 ONLYOFFICE的版本介绍 产品新功能——篇【2】 一.关于 ONLYOFFICE的新增功能介绍 二.ONL…

[vulnhub]DC: 1

https://www.vulnhub.com/entry/dc-1,292/ 主机发现端口扫描 使用nmap扫描网段类存活主机 因为靶机是我最后添加的,所以靶机IP是156 nmap -sP 192.168.75.0/24 // Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-28 12:48 CST Nmap scan rep…