美文网首页
数据库索引

数据库索引

作者: 谁家的猪 | 来源:发表于2019-08-05 07:51 被阅读0次

为什么要使用索引

为了避免全表扫描,加快数据的查询速度

什么样的信息能成为索引

主键、唯一键以及普通键等

索引的数据结构

  • 生成索引,建立二叉查找树进行二分查找
  • 生成索引,建立B-Tree结构进行查找
  • 生成索引,建立B+-Tree结构进行查找
  • 生成索引,建立Hash结构进行查找

B-Tree

B-Tree.png

定义

  • 根节点至少包含两个孩子
  • 树中每个节点最多含有m个孩子(m >= 2)
  • 除根节点和叶节点外,其他每个节点至少有cell(m/2)个孩子
  • 所有叶子节点都位于同一层

B+-Tree

B+-Tree.png

定义

B+树是B树的变体,其定义基本与B树相同,除了:

  • 非叶子节点的子树指针与关键字个数相同
  • 非叶子节点的子树指针P[i],指向关键字值[K[i],K[i+1])的子树
  • 非叶子节点仅用来索引,数据都保存在叶子节点中
  • 所有叶子节点均有一个链指针指向下一个叶子节点,并按大小顺序链接

B+树更适合做存储索引

  • B+树的磁盘读写代价更低
  • B+树的查询效率更加稳定O(logn)
  • B+树更有利于对数据库的扫描

Hash索引

缺点

  • 仅仅能满足“=”,“IN”,不能使用范围查询
  • 无法被用来避免数据的排序操作
  • 不能利用部分索引键查询
  • 不能避免表扫描
  • 遇到大量Hash值相等的情况后性能并不一定就会比B+树索引高

稀疏索引和密集索引

  • 密集索引文件中每个搜索码值都对应一个索引值(包不仅保存键值,还保存其他列信息)
  • 稀疏索引文字只为索引码的某些值建立索引项(只有键位信息和该行地址)

Mysql—InnoDB

  • 若一个主键被定义,该主键则作为密集索引
  • 若没有主键被定义,该表的第一个唯一非空索引则作为密集索引
  • 若不满足以上条件,InnoDB内部会生成一个隐藏主键(密集索引)
  • 非主键索引存储相关键位值和其对应的主键值,包含两次查找

通过稀疏索引查找到主键,然后密集索引找到具体数据


根据索引查找.png

InnoDB数据和索引在同一个文件中
MyISAM数据在一个文件中,索引在一个文件中

相关文章

  • 数据库索引记录

    本文用来记录数据库索引相关内容; 1】数据库索引分为单列索引,组合索引,全文索引,空间索引 2】单列索引:只有一个...

  • 索引,序列,视图

    1、数据库索引索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引。在数据库中索引可以减少数据库程序查询结果...

  • Sql索引优化—转载

    数据库索引使用方式 使用索引是提高数据库查询效率的主要方式,下面从索引结构,索引类型,索引操作,命中索引几个方面来...

  • 数据库 - 索引

    索引 索引 索引的建立对于数据库的高效运行是很重要的。索引可以大大提高数据库的检索速度。 索引分单列索引,组合索引...

  • [Mysql]Mysql索引实现原理及相关优化策略

    数据库索引 数据库索引是什么? A database index is a data structure that...

  • 数据库索引定义和类型

    数据库索引类型及实现方式 1、索引定义 数据库索引好比是一本书前面的目录,能加快数据库的查询速度。索引是对数据库表...

  • 数据库索引结构总结

    [TOC] 参考 数据库索引数据结构总结 本文摘抄自数据库索引数据结构总结 1. 摘要 数据库索引是数据库中最重要...

  • MySQL 索引

    MySQL 索引 数据库索引的原理:数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表...

  • 『数据库』索引的工作原理

    数据库索引能够提高数据库的查询效率,那么索引到底是什么。 什么是索引 索引本身这个名字已经能回答这个问题了,索引就...

  • PostgreSQL基础知识--索引

    索引是增强数据库性能的常用方法。索引使得数据库在查找和检索数据库的特定行的时候比没有索引快得多。但索引页增加了整个...

网友评论

      本文标题:数据库索引

      本文链接:https://www.haomeiwen.com/subject/acwirctx.html