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

Mysql索引总结(1)

先来说几个小点:

索引是数据的目录。

如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法就是存储引擎。MySQL 存储引擎有 MyISAM 、InnoDB(MySQL5.5后默认)、Memory。

索引的分类:

 按数据结构分类:
 B+tree索引:是最常用的索引结构,InnoDB 存储引擎默认使用 B+树索引。它的特点是能够保持数据稳定有序,并且叶子节点之间通过指针连接,便于范围查询。
Hash索引:基于哈希表实现,查找速度快,但不支持范围查询,因为哈希函数将键映射到哈希表中的位置,是随机的。
Full  text索引:主要用于全文搜索,能够对文本内容进行分词等操作,从而支持复杂的文本搜索查询。
 按物理存储分类
 聚簇索引(主键索引):索引和数据 "绑" 在一起,找起来快,但修改起来麻烦(改了索引可能要动整体顺序)
非聚簇索引(辅助索引):索引和数据分开存,修改方便,但查询时可能要多一步(先查索引再找数据)
字段特性分类:
主键索引:是一种特殊的唯一索引,不允许有空值,一个表只能有一个主键索引。
唯一索引:索引列的值必须唯一,但可以有空值(如果是单列唯一索引,多列的话组合值唯一)。
普通索引:最基本的索引类型,没有唯一性等特殊限制,用于提高查询效率。
前缀索引:对字符串类型的列,只取其前面部分字符建立索引,用于减少索引存储空间等情况。
字段个数分类:
单列索引:基于单个字段建立的索引。
联合索引:基于多个字段组合建立的索引,遵循“最左前缀”原则等,在查询时能更高效地利用索引。(ps:最左匹配原则,也就是按照最左优先的方式进行索引的匹配。在使用联合索引进行查询的时候,如果不遵循「最左匹配原则」,联合索引会失效,这样就无法利用到索引快速查询的特性了。

B+Tree 存储千万级的数据只需要 3-4 层高度就可以满足,这意味着从千万级的表查询目标数据最多需要 3-4 次磁盘 I/O,所以B+Tree 相比于 B 树和二叉树来说,最大的优势在于查询效率很高,因为即使在数据量很大的情况,查询一个数据的磁盘 I/O 依然维持在 3-4次。

主键索引的 B+Tree 的叶子节点存放的是实际数据,所有完整的用户记录都存放在主键索引的 B+Tree 的叶子节点里;
二级索引的 B+Tree 的叶子节点存放的是主键值,而不是实际数据。(所以非聚簇索引要回表查询)ps:回表:先检二级索引中的 B+Tree 的索引值(商品编码,product_no),找到对应的叶子节点,然后获取主键值,然后再通过主键索引中的 B+Tree 树查询到对应的叶子节点,然后获取整行数据。这个过程叫「回表」,也就是说要查两个 B+Tree 才能查到数据

ps2:当查询的数据是能在二级索引的 B+Tree 的叶子节点里查询到,这时就不用再查主键索引。这种在二级索引的 B+Tree 就能查询到结果的过程就叫作「覆盖索引」,也就是只需要查一个 B+Tree 就能找到数据。


文章转载自:

http://dnoXepu9.wzjhL.cn
http://O5bK8zP8.wzjhL.cn
http://MLt5eV01.wzjhL.cn
http://lEf5Tb0o.wzjhL.cn
http://bxo79Bp3.wzjhL.cn
http://DDUSoq6v.wzjhL.cn
http://DUjcU3Mj.wzjhL.cn
http://7ogXdTKv.wzjhL.cn
http://IbQVpQCK.wzjhL.cn
http://GZ0ptEet.wzjhL.cn
http://D9mlRmdr.wzjhL.cn
http://KyxDA3GE.wzjhL.cn
http://nV91jHgd.wzjhL.cn
http://27RbeChJ.wzjhL.cn
http://c6EEIDFD.wzjhL.cn
http://NK8rUcFl.wzjhL.cn
http://FD5mrO3y.wzjhL.cn
http://CdgQnVq9.wzjhL.cn
http://Qyvwy3d8.wzjhL.cn
http://fz8APxpu.wzjhL.cn
http://on3G4hUJ.wzjhL.cn
http://xKxQFjQd.wzjhL.cn
http://aBcpBjM7.wzjhL.cn
http://N0awxctE.wzjhL.cn
http://gTDfIC3N.wzjhL.cn
http://ynpRzP27.wzjhL.cn
http://ySLdHsoL.wzjhL.cn
http://u8Eewt3R.wzjhL.cn
http://9taQYM1F.wzjhL.cn
http://1e1nOVQE.wzjhL.cn
http://www.dtcms.com/a/385388.html

相关文章:

  • Spring Boot中的Binder类基本使用和工具封装
  • 数字化工厂建设:是简单组装PLM/ERP/MES/WMS等系统,还是彻底重构?
  • 带你了解STM32:OLED调试器
  • 软考中项考几门?多少分合格?
  • 1.5 调用链分层架构 - mybatis源码学习
  • 线性代数 · 矩阵 | 秩 / 行秩 / 列秩 / 计算方法
  • 期权时间价值会增长么?
  • 数据结构(陈越,何钦铭) 第十讲 排序(下)
  • Java——JVM
  • 【51单片机】【protues仿真】基于51单片机温度检测系统
  • 51单片机-使用IIC通信协议实现EEPROM模块教程
  • ISP Pipeline
  • Tomcat的安装和启动步骤以及常见问题
  • 基于 Selenium+Page Object 的电商平台自动化测试框架实践
  • 内网安全:自签名、CA机构签发与SSH、sudo最佳实践
  • 深度学习-计算机视觉-风格迁移
  • 机器学习面试题:请介绍一下你理解的集成学习算法
  • C2000基础-GPIO介绍及使用
  • 【CTF-WEB】Web基础工具的使用(burpsuit抓包并修改数值)
  • 重学前端015 --- 响应式网页设计 CSS变换
  • Spring Boot + MyBatis 报 Invalid bean definition 如何排查解决
  • 从 APP 界面设计到用户体验优化:如何让你的应用脱颖而出?
  • RabbitMQ 高可用与集群机制
  • 迎中秋庆国庆,易天假期安排通知
  • IFNet.py代码学习 自学
  • 深度学习之PyTorch基本使用(一)
  • Python 异常处理与文件操作全解析
  • 记一次神通数据库的链接不释放问题
  • FLASK 框架 (关于Flask框架的简单学习和项目实战)
  • Flutter学习项目