mysql-索引

一、索引是什么?

索引是帮助MySQL高效获取数据的数据结构。

二、索引能干什么?

索引非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。索引能够轻易将查询性能提高好几个数量级,总的来说就是可以明显的提高查询效率。

三、索引的分类?

1、从存储结构上来划分:BTree索引(B-Tree或B Tree索引),Hash索引,full-index全文索引,R-Tree索引。这里所描述的是索引存储时保存的形式,

2、从应用层次来分:普通索引,唯一索引,复合索引

3、根据中数据的物理顺序与键值的逻辑(索引)顺序关系:聚集索引,非聚集索引。

B树
B树中,每个结点中关键字从小到大排列
B树 都取在内存中查询

B-Tree 特性

关键字集合分布在整颗树中;
任何一个关键字出现且只出现在一个结点中;
搜索有可能在非叶子结点结束;
其搜索性能等价于在关键字全集内做一次二分查找;
自动层次控制;

B-Tree搜索原理

B-树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果命中则结束,否则进入查询关键字所属范围的儿子结点;重复,直到所对应的儿子指针为空,或已经是叶子结点;
因此,B-Tree的查找过程是一个顺指针查找结点和在结点的关键字中进行查找的交叉进行的过程。

B-Tree 插入

B-树是从空树起,逐个插入关键码而生成的。

在B-树,每个非失败结点的关键码个数都在[ m/2 -1, m-1]之间。插入在某个叶结点开始。如果在关键码插入后结点中的关键码个数超出了上界 m-1,则结点需要“分裂”,否则可以直接插入。

B Tree(B-Tree变种)索引可存16KB
  B 树可以看作是B树的一种变形,在实现文件索引结构方面比B树使用得更普遍。

B Tree与B-Tree区别
1 非叶子节点不存储data 只存储索引(余)可以放更多的索引
2叶子节点包含所有索引字段(所有关键字都在叶子结点出现)
3叶子点用指针连接,提高区间的访问的性能(为所有叶子结点增加一个链指针)
4非叶子结点的子树指针与关键字个数相同;
非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i 1])的子树(B-树是开区间);
为所有叶子结点增加一个链指针;
所有关键字都在叶子结点出现;

对B 树进行两种搜索运算

循叶结点链顺序搜索
另一种是从根结点开始,进行自顶向下,直至叶结点的随机搜索。

B Tree的优势
1、更加高效的单元素查找

a、首先B 树的中间节点不存储data,所以同样大小的磁盘页可以容纳更多的节点元素,如此一来,相同数量的数据下,B 树就相对来说要更加矮胖些,磁盘IO的次数更少。

b、由于只有叶子节点才保存data,B 树每次查询都要到叶子节点;而B树每次查询则不一样,最好的情况是根节点,最坏的情况是叶子节点,没有B 树稳定。
2、叶子节点形成有顺链表,范围查找性能更优

来源:https://www.icode9.com/content-2-812351.html

(0)

相关推荐

  • b树和b+树的区别

    转载自https://blog.csdn.net/login_sonata/article/details/75268075 一,b树 b树(balance tree)和b+树应用在数据库索引,可以认 ...

  • B-Tree 和 B+Tree傻傻分不清楚

    B-Tree B-Tree又叫做B树,和平衡二叉树不同的地方在于B树是多叉树(平衡多路查找树),Oracle和MongoDB的索引技术就是基于B树的数据结构,B树也可以看作是对2-3查找树的一种扩展. ...

  • 我想不通!MySQL 为什么使用 B 树来作索引?

    什么是索引? 所谓的索引,就是帮助 MySQL 高效获取数据的排好序的数据结构.因此,根据索引的定义,构建索引其实就是数据排序的过程. 平时常见的索引数据结构有: 二叉树 红黑树 哈希表 B Tree ...

  • Sorry!Hbase的LSM Tree就是可以为所欲为!

    我们先抛出一个问题: LSM树是HBase里使用的非常有创意的一种数据结构.在有代表性的关系型数据库如MySQL.SQL Server.Oracle中,数据存储与索引的基本结构就是我们耳熟能详的B树和 ...

  • B树、B 树详解

    B树 前言 首先,为什么要总结B树.B+树的知识呢?最近在学习数据库索引调优相关知识,数据库系统普遍采用B-/+Tree作为索引结构(例如mysql的InnoDB引擎使用的B+树),理解不透彻B树,则 ...

  • 这篇 MySQL 索引和 B Tree 讲的太通俗易懂!

    来源:https://blog.csdn.net/b_x_p/article/details/86434387 作者:he_321 正确的创建合适的索引,是提升数据库查询性能的基础.在正式讲解之前,对 ...

  • MySQL索引底层:B+树详解

    前言 当我们发现SQL执行很慢的时候,自然而然想到的就是加索引.对于范围查询,索引的底层结构就是B+树.今天我们一起来学习一下B+树哈~ 公众号:「捡田螺的小男孩」 树简介.树种类 B-树.B+树简介 ...

  • 什么情况?MySQL居然有中“8种”索引?

    关于MySQL索引相关的内容,一直是一个让人头疼的问题,尤其是对于初学者来说.笔者曾在很长一段时间内深陷其中,无法分清"覆盖索引,辅助索引,唯一索引,Hash索引,B-Tree索引--&qu ...

  • MySQL索引是怎么支撑千万级表的快速查找?

    本文作者:何建辉(公众号:org_yijiaoqian) 前言 在 MySQL 官方提到,改善操作性能的最佳方法 SELECT 在查询中测试的一个或多个列上创建索引.索引条目的作用类似于指向表行的指针 ...

  • 开发者都需要了解的mysql索引四大存储引擎

    MySQL索引分为普通索引.唯一索引.主键索引.组合索引.全文索引.索引不会包含有null值的列,索引项可以为null(唯一索引.组合索引等),但是只要列中有null值就不会被包含在索引中. 接着让我 ...

  • MySQL索引失效底层原理分析,MySQL索引为什么失效,这篇文章全部告诉你

    前言 吊打面试官又来啦,今天我们讲讲MySQL索引为什么会失效,很多文章和培训机构的教程,都只会告诉你,在什么情况下索引会失效. 比如:没遵循最佳左前缀法则.范围查询的右边会失效.like查询用不到索 ...

  • MySQL索引和SQL调优

    MySQL索引 MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等.为了避免混乱,本文将只关注于BTree ...

  • 看这篇就够了!MySQL 索引知识点超全总结

    作者:fanili,腾讯 WXG 后台开发工程师 知其然知其所以然!本文介绍索引的数据结构.查找算法.常见的索引概念和索引失效场景. 什么是索引? 在关系数据库中,索引是一种单独的.物理的对数据库表中 ...

  • 再有人问你MySQL索引原理,就把这篇文章甩给他!

    作者 l zyz1992 来源 l Hollis(ID:hollischuang) 索引,可能让好很多人望而生畏,毕竟每次面试时候 MySQL 的索引一定是必问内容,哪怕先撇开面试,就在平常的开发中, ...

  • 数据库索引简介(一)mysql索引简介

    一.索引方法 Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE. 1. FULLTEXT 即为全文索引,目前只有MyISAM引擎支持.其可以在CREATE TA ...

  • 性能调优-MySQL索引数据结构详解与索引优化

    本篇文章主要学习了MySQL的索引的数据结构的认识,做一个大概的了解即可. 一.索引 在关系数据库中,索引是一种单独的.物理的对数据库表中一列或多列的值进行排序的一种存储数据结构,它是某个表中一列或若 ...

  • 耗时3天,整整2W字干货讲解Mysql索引,简历上给我写精通Mysql

    索引概念 概念:索引是提高mysql查询效率的数据结构.总的一句话概括就是索引是一种提高查询效率的数据结构. 数据库查询是数据库的最主要功能之一.设计者们都希望查询数据的速度能尽可能地快,因此数据库系 ...