热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

InnoDB存储引擎索引与算法

InnoDB存储引擎-索引与算法-5.1.InnoDB存储引擎索引概述InnoDB支持以下集中常见的索引:B+树索引全文索引哈希索引前面提到过,哈希索引是InnoDB

5.1. InnoDB存储引擎索引概述

InnoDB支持以下集中常见的索引:

  • B+树索引
  • 全文索引
  • 哈希索引

前面提到过,哈希索引是InnoDB为了优化B+树索引而自动生成的自适应哈希索引,所以无法做到人为干预。

B+树索引就是传统意义上的索引,但是需要明确一点,B+树无法找到具体某一行记录,它只能找到记录所在的页,然后把页载入到内存,再进行查找

5.2. 数据结构与算法

5.2.1. 二分查找法

不说了,数据结构基础

5.2.2. 二叉查找树和平衡二叉树

也不说了,不是本节重点。

5.3. B+树

在B+树中,所有记录节点都是按照键值顺序存放在同一层的叶子结点上。各节点之间通过双向链表链接,节点内就是多个页,页与页之间也是通过双向链表链接的。

5.4. B+树索引

B+索引在数据库中有一个特点就是高扇出性。聚族索引和辅助索引的区别在于,聚族索引存放的是是实际的数据,而辅助索引存放的是聚族索引的键(或者说表的主键)。

5.4.1. 聚集索引(又名:聚族索引/聚簇索引/主键索引)

聚集索引就是按照每张表的主键生成一棵B+树,同时叶子结点存放的是行记录数据,因此也将聚集索引的叶子结点称为数据页

由于实际上数据页只能按照一棵B+树进行排序,因此每张表只能拥有一个聚集索引。一般来说,优化器倾向于使用聚集索引,因为它能在B+树的叶子结点上直接获得数据。

聚集索引的另一个优点是,对于主键的排序查找和范围查找非常快。另外,因为B+树索引基于双链表,所以可以快速找到最后一个数据页,此时插入操作会很快。

另一个优势是范围查询,因为B+树的性质,所以可以很容易得到某一范围所在的页,然后完成读取即可。

5.4.2. 辅助索引

辅助索引的数据部分存放的是主键。每次通过辅助索引索引数据时,需要定位到主键,然后再通过主键索引定位到数据。

5.4.3. B+树索引的分裂

5.4.4. B+树索引的管理

可以通过ALTER TABLE或CREATE/DROP INDEX来创建或删除索引,同时用户可以设置对整个列的索引,也可以只设置某个列的开头部分数据作为索引。

5.5. Cardinality值


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文介绍了如何在 DB2 环境中创建和删除数据库编目。创建编目是连接新数据库的必要步骤,涉及获取数据库连接信息、使用命令行工具进行配置,并验证连接的有效性。删除编目则用于移除不再需要的数据库连接。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 本文详细介绍了如何使用libpq库与PostgreSQL后端建立连接。通过探讨PQconnectdb()函数的工作原理及其在实际应用中的使用方法,帮助读者理解并掌握建立高效、稳定的数据库连接的关键步骤。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • SQL中UPDATE SET FROM语句的使用方法及应用场景
    本文详细介绍了SQL中UPDATE SET FROM语句的使用方法,通过具体示例展示了如何利用该语句高效地更新多表关联数据。适合数据库管理员和开发人员参考。 ... [详细]
  • Navicat Premium 15 安装指南及数据库连接配置
    本文详细介绍 Navicat Premium 15 的安装步骤及其对多种数据库(如 MySQL 和 Oracle)的支持,帮助用户顺利完成软件的安装与激活。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • IT项目管理过程中的方法、工具、技术
    工欲善其事,必先利其器。而对于一个软件开发项目,最重要的器就是方法,工具和技术。而这三要素中重要的又是方法论,方法是基础&# ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
author-avatar
尘世聚散
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有