【MySQL】索引

【MySQL】索引

个人主页♡喜欢做梦

欢迎  👍点赞  ➕关注  ❤️收藏  💬评论


 

目录

🍀一、什么是索引

🍀二、为什么要使用索引?

🍀三、索引的分类

🌺哈希索引

🌺二叉搜索树

🌺N叉树

🌳B树

🌳B+树

🌳B+树与B树的区别


🍀一、什么是索引

MySQL 是索引的一种数据结构,他可以帮助数据库高校的查询、更新数据表中的数据。通过一定的排序规则排列数据表中的记录,加快对表的查询。索引一般是书籍、文献等,按照一定规则编排,方便查找特定内容的目录工具。例如,你在一个表格里面要查找自己的名字,你不同自己一行一行去看,直接在搜索栏里面搜索自己的名字。

🍀二、为什么要使用索引?

可以提高查询效率:减少数据库在执行查询需要扫描的数据量。在大量的数据中,如果没有索引需要扫描整个表,如果有了索引,那么可以快速定位。实现数据库的唯一约束:通过创建唯一索引,可以确保表中某列或某组列的数据值具有唯一性。在“学生表”中,将“学生学号”列创建唯一索引,可以防止学号重复,确保数据的准确性和完整性。支持数据的排序和分组操作:数据库在进行排序和分组操作时,如果相关列上有索引,数据库可以利用索引的有序性来高效完成这些操作,而无需额外的排序操作,从而提高查询性能。优化连接操作:在多表连接查询时,索引可以帮助数据库更快的找到连接。 

🍀三、索引的分类

🌺哈希索引

  1. 结构特点:基于哈希表实现,通过索引键的哈希值直接定位数据位置,类似字典的“键-值”映射。
  2. 优势:时间复杂度为O(1),查找速度快
  3. 局限性:1.主要:不支持范围查找、排序和模糊查询;2.哈希冲突影响性能;3.MySQL并没有选择哈希作为默认数据结构,仅Memory默认支持。

🌺二叉搜索树

1.定义:二叉搜索树是一种特殊的二叉树,性质:

  • 其左子树中所有节点的值均小于根节点的值;
  • 其右子树中的所有节点的值均大于根节点的值;
  • 左右子树本身也是二叉搜索树(递归定义)。 

 2.结构特点

  • 每个节点最多有两个子节点(左孩子、右孩子);
  • 中序遍历得到的结果是有序递增的,便于快速查找

3.优势:

  •  查找效率:理想情况下,插入、删除、查询时间复杂度为O(log2n);
  • 实现简单:逻辑简单,适合数量较小的场景。

4.局限性:

  • 最坏情况下时间复杂度为O(n),BST退化为单链表时,时间复杂度为O(n);
  • 节点个数过多无法保证树高。磁盘效率低,磁盘IO是制约数据库性能的主要性能。
  • 范围查询效率低,需要遍历多个节点。

🌺N叉树

1.定义:N叉树是每个节点最多有N个子节点(N>2)的树形结构,N的取值根据场景而定。

2.结构特点:

  • 每个节点包含多个关键字和对应的子节点指针,关键字按顺序排序;

3. 优势:

  • 降低树的深度:在相同数据量的情况下,可以有效控制树高,N越大,层级越少,大幅减少磁盘IO次数。
  • 高效支持范围查询:时间复杂度为O(logN)。若子节点通过链表连接,可以快速扫描连续范围的数据。
  • 适合大规模数据:节点可存储多个关键字。

4.局限性:

  • N的取值需要合理设计;
  • 节点结构更复杂。 

🌳B树

1.定义:是一种平衡的多路搜索树,在B树中每个节点的子节点可以多于两个子节点。

2.查询方式:在B树查找一个关键字,从根节点开始,根据关键字与节点中关键字的比较结构决定进入哪个节点,知道找到关键字或者达到叶子结点为止。 

    如果想要画图可以点击下方链接来画图: 

    B—Treehttps://cs.csub.edu/~msarr/visualizations/BTree.html

      🌳B+树

      1.定义:B+是B树的一种变形,在B树的基础上进行优化,更适合在数据库中作为索引结构使用。经常用于数据库和文件系统等场合的平衡查找树。MySQL索引采用的数据结构。

      2.查询方式:与B树类似,但是其可以利用叶子节点的链表结构,快速遍历范围内的所有数据。

       如果想要画图可以点击下方链接来画图: 

      B+Treehttps://www.cs.usfca.edu/~galles/visualization/BPlusTree.html

      B树和B+树是N叉树的具体实现。 

      🌳B+树与B树的区别

       

      区别B树B+树
      节点存储叶子节点、非叶子节点存储索引+数据非叶子节点进存储索引,叶子节点存储索引+数据
      查询路径数据分布在所有节点,可以在非叶子节点找到所查询的数据非叶子节点的值都保存在叶子节点,数据只分布在叶子节点,非叶子节点值保存对子节点的应用,没有保存真实数据。只能在叶子节点找到所查询的数据
      范围查询逐层遍历节点叶子节点使用双链表连接,叶子节点之间有一个相互连接的引用,可以通过子节点找到兄弟节点

       

      Read more

      VSCode扩展工具Copilot MCP使用教程【MCP】

      VSCode扩展工具Copilot MCP使用教程【MCP】

      MCP(Model Context Protocol,模型上下文协议) ,2024年11月底,由 Anthropic 推出的一种开放标准,旨在统一大型语言模型(LLM)与外部数据源和工具之间的通信协议。本文章教你使用VSCode扩展工具Copilot MCP快速上手MCP应用! 1. VSCode中安装Copilot MCP Copilot MCP是一个适用于 VSCode 的 MCP Client。 2. Copilot MCP使用 安装之后会出现Coplilot授权,并在左侧菜单中出现MCP Server按钮 3. Add Server 点击Add Server,MCP Server分为两种建立方式,Process和SSE 以Process为例,输入必要信息: 其中Server Name是你给Server起的任意名字,需要注意的是Start Command。 这里我的输入为: npx -y @modelcontextprotocol/server-filesystem /path 注意path修改为自己的文件路径,

      By Ne0inhk
      [源力觉醒 创作者计划]_文心一言 4.5开源深度解析:性能狂飙 + 中文专精

      [源力觉醒 创作者计划]_文心一言 4.5开源深度解析:性能狂飙 + 中文专精

      文章目录 * [源力觉醒 创作者计划]_文心一言 4.5开源深度解析:性能狂飙 + 中文专精 * 一. 部署实战:单卡环境的极速落地 * 1.1 🖥️ 环境配置の手把手教程 📝 * 部署准备:硬件与镜像 * 依赖安装:一行代码搞定 * 1.2 🚀 模型启动の参数与验证 ✅. * 二. 多场景能力验证:从工业到学术 * 2.1 🏥 医疗影像诊断:从模糊影像到病灶定位 * 2.2 🚦 交通流优化:动态拥堵预测与策略设计 * 2.3 🔍 考古文本破译:甲骨文符号的跨学科解读 * 三. 性能优化与问题解决 * 3.1 🚀 性能优化策略:让模型跑得更快 * 3.2 🛠️ 常见错误解决方案 * 四. 与同类模型对比 * 🍬 核心优势对比🍭 * 🍬 对比结论🍭 * 五、

      By Ne0inhk
      AI的提示词专栏:LLaMA-2 与 Mixtral 的提示词调优技巧

      AI的提示词专栏:LLaMA-2 与 Mixtral 的提示词调优技巧

      AI的提示词专栏:LLaMA-2 与 Mixtral 的提示词调优技巧 本文围绕 LLaMA-2 与 Mixtral 两大模型的提示词调优展开,先分析二者核心特性,再针对性给出适配原则与实战技巧。LLaMA-2 因参数规模差异大、通用领域训练数据为主、指令敏感度低,需按参数分层设计提示词、补充领域知识、强化指令约束,还提供了结构化指令、Few-Shot 示例等 5 个实战技巧;Mixtral 凭借混合专家架构、长上下文窗口、强多语言能力,需引导激活对应专家模块、合理处理长文本、规范多语言输出,配套专家引导指令等 4 个技巧。文章还对比二者调优重点与适用场景,指出常见误区并给出避坑方案,最后总结核心思路并提供后续实践建议,助力开发者优化提示词、发挥模型性能。 人工智能专栏介绍     人工智能学习合集专栏是 AI 学习者的实用工具。它像一个全面的 AI 知识库,把提示词设计、AI 创作、智能绘图等多个细分领域的知识整合起来。

      By Ne0inhk
      Windows 11 配置 CUDA 版 llama.cpp 并实现系统全局调用(GGUF 模型本地快速聊天)

      Windows 11 配置 CUDA 版 llama.cpp 并实现系统全局调用(GGUF 模型本地快速聊天)

      Windows 11 配置 CUDA 版 llama.cpp 并实现系统全局调用(GGUF 模型本地快速聊天) 前言 在本地快速部署大模型进行离线聊天,llama.cpp 是轻量化、高性能的首选工具,尤其是 CUDA 版本能充分利用 NVIDIA 显卡的算力,大幅提升模型推理速度。本文将详细记录在 Windows 11 系统中,从环境准备、CUDA 版 llama.cpp 配置,到实现系统全局调用、快速运行 GGUF 格式模型的完整步骤,全程基于实际操作验证,适配 RTX 3090 等 NVIDIA 显卡,新手也能轻松上手。 https://github.com/ggml-org/llama.cpp

      By Ne0inhk