当前位置: 首页 > news >正文

Mysql系列-索引简介

索引是排好序数据结构

1 索引数据结构

  • hash索引、二叉树、平衡二叉树、B-Tree、B+Tree
  •  数据结构在线示例:点击跳转 

2 索引类型

2.1 聚簇索引

又叫“聚集索引” ,索引和数据存储在一起

2.2 非聚簇索引

又叫“非聚集索引” ,索引和数据分开存储

3 InnoDB存储引擎的索引

  1. 表数据文件本身是按B+Tree组织的一个索引结构文件
  2. 聚簇索引-叶节点包含完整的数据
    • 叶子节点保存全部(列)数据
    • 非叶子节点仅保存索引

3.1 设计与常见规范

3.1.1 推荐表中包含整型自增主键

建议Innodb表必须包含主键,并且推荐使用整型自增主键

  • 整型字段占用的更小的空间,可以节约磁盘;
  • 整型字段更方便进行数据比对,而字符串比较时需要逐位比较,效率相对低一些;
  • 自增是为了避免节点分裂,导致插入、更新数据性能降低;

3.1.2 推荐使用自增主键

  • 依次插入:1、3、5、7、9、10、11、12、13、14

  • 当继续插入:2、4之后,树进行了分裂,分裂效果图如下

  • 可以看出,如果是连续自增的ID,则默认会追加新的节点,不会导致节点大规模的分裂
  • 如果插入不连续的ID,会导致原先的节点分裂,影响整体的性能

3.1.3 二级索引叶子节点存储主键值

保证数据一致性,节省存储空间;

具体参考如下图的区别:图3.4 聚簇索引-主键索引、图3.4.2 非聚簇索引-联合主键

3.2 Hash索引

  • 对索引的Key进行一次hash计算就可以定位出数据存储的位置
  • 很多时候Hash索引要比B+Tree索引效率更高效
  • 仅能满足=、in,不支持范围查询
  • Hash冲突,需要额外使用链表解决

3.3 B-Tree索引

  • 叶节点具有相同的深度,叶节点的指针为空
  • 所有索引元素不重复
  • 节点中的数据索引从左到右递增排列

3.4 B+Tree(特指Mysql的B+Tree)

  • 非叶子节点不存在data,只存储索引(冗余索引),可以存放更多的索引
  • 叶节点包含所有索引字段
  • 叶子节点用双向指针链接,提高区间访问的性能
    • 普通的B+Tree的叶子结点之间仅存在单向指针,而mysql对B+Tree做了优化升级,支持双向指针,提升区间之间的数据访问效率
图3.4 聚簇索引-主键索引

3.4.1 非聚簇索引-联合主键

图3.4.1 非聚簇索引-联合主键

3.4.2 非聚簇索引-联合索引

图 3.4.2 非聚簇索引-联合索引

索引优化待完善

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • qt-creator-10.0.2之后版本的jom.exe编译速度慢下来了
  • AI逻辑推理入门
  • FFT提取图像特征
  • harmony初学者入门
  • 【iOS】dismiss多级的方法
  • Xilinx系FPGA学习笔记(九)DDR3学习
  • Gitee注册-添加公钥-建立本地仓库
  • 原生 input 中的 “type=file“ 上传文件
  • LeetCode 每日一题 2024/9/9-2024/9/15
  • Linux常见查看文件命令
  • 国产化中间件正在侵蚀开源中间件
  • 二叉搜索树(Java实现)
  • 【智路】智路OS Airos Edge 2.0 Quick Start
  • Golang | Leetcode Golang题解之第403题青蛙过河
  • 【VUE】快速上手
  • 「译」Node.js Streams 基础
  • Android系统模拟器绘制实现概述
  • dva中组件的懒加载
  • es6要点
  • Golang-长连接-状态推送
  • V4L2视频输入框架概述
  • vue:响应原理
  • VuePress 静态网站生成
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • windows下如何用phpstorm同步测试服务器
  • XForms - 更强大的Form
  • 阿里研究院入选中国企业智库系统影响力榜
  • 创建一个Struts2项目maven 方式
  • 如何优雅地使用 Sublime Text
  • 阿里云服务器购买完整流程
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #Z0458. 树的中心2
  • (02)Unity使用在线AI大模型(调用Python)
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (c语言+数据结构链表)项目:贪吃蛇
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (MATLAB)第五章-矩阵运算
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • .chm格式文件如何阅读
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Core 中插件式开发实现
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .net framework 4.8 开发windows系统服务
  • .NET 中创建支持集合初始化器的类型
  • .NET开发者必备的11款免费工具
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @Not - Empty-Null-Blank
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [Android]一个简单使用Handler做Timer的例子
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息