广告
返回顶部
首页 > 资讯 > 数据库 >Mysql索引基本原理
  • 367
分享到

Mysql索引基本原理

Mysql索引基本原理 2017-03-31 10:03:36 367人浏览 绘本
摘要

  1.Mysql表空间、段、区、页     在讲索引的概念之前我们先说一下mysql中段区页的概念。     表空间是Mysql数据库存储的最高层,默认情况下InnoDB引擎只有一个表空间,所有的数据都是存放在这个表空间内。  

Mysql索引基本原理

 

1.Mysql表空间、段、区、页

    在讲索引的概念之前我们先说一下mysql中段区页的概念。

    表空间是Mysql数据库存储的最高层,默认情况下InnoDB引擎只有一个表空间,所有的数据都是存放在这个表空间内。

    在表空间下数据是以段区页的形式进行存储的。一张Mysql表存储在数据库当中不是以行为单位存储数据读取的,mysql数据库读取的最小单位是页。

    段:一个段是由多个区构成的, 常见的段有数据段、索引段、回滚段等,在InnoDB存储引擎中,对段的管理都是由引擎自身所完成的。

    区:一个区是由多个连续的页组成的空间 ,无论页的大小怎么变动,一个区的默认大小是1M,默认情况下一个区包含64个连续的页,为保证区中的页是连续的 InnoDB会一次从磁盘中申请4~5个区。

    页:页也叫做块,默认情况下一个页大小为16K(可以通过 innodb_page_size 参数来设置一个页的大小), 常见的页类型有:数据页,索引页, undo页 ,系统页,事务数据页等。 每页存储最多的行记录也是有硬性规定的最多16KB/2-200,即7992行

    我们在数据库中查找数据其实是将磁盘中的数据加载到内存的一个过程。在这里,数据库不是将我们所需要查看的某一行或者某几行数据加载到内存当中,而是将我们需要查看的数据所在的页加载到内存当中。

 

2.数据库索引

    索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

    常见的索引类型有:主键索引、唯一索引、普通索引、全文索引、组合索引。同时索引还分为聚簇索引和非聚簇索引,一张表只能有一个聚簇索引,其它的索引都是聚簇索引。

聚簇索引:一个表中只能有一个聚簇索引。一般情况下聚簇索引默认是主键 ,如果表中没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB 会隐式定义一个主键来作为聚簇索引。而且聚簇索引对应的索引值在物理上是连续的。

聚簇索引:除了聚簇索引以外的索引是非聚簇索引。非聚簇索引是以聚簇索引为基础创建的。非聚簇索引记录的是聚簇索引的索引值,当我们通过一个普通索引去查找数据的时候其实普通索引会先去差对应数据的聚簇索引的索引值,然后再通过聚簇索引的索引值去查询对应的数据。

    这里说的是InnoDB引擎下的聚簇索引,对于MyISAM来说是没有聚簇索引的。使用MyISAM引擎的表的主键不是聚簇索引,MyISAM引擎的主键索引和其它索引一样可以直接找到对应数据的位置,其它索引不需要先找到主键索引,再通过主键索引去找对应数据。这个和两个引擎一个使用B树一个使用B+树来实现索引有关系。

3.索引的数据结构

    Mysql索引用到的数据结构主要为B树,但是也有用到hash,不同的引擎用到的数据结构不同。InnoDB引擎用到的是B+树索引, MyISAM引擎用到的是B树索引,还有 Memory引擎用到的HASH索引。

    由于HASH索引是利用HASH值来计算索引值,在等值查询的情况下对数据的查询效率比较高,但是再范围查询的时候的查询效率与B树索引相比就差很多了,所以我们使用当中更多的是用到的B+树索引。

 

多路查找树

    多路查找树的每一个节点可以存储多个元素且每个节点的孩子节点数可以有多个。和普通树相比,多路查找树的一个节点不再是只能存储一个元素 ,这打破了我们对树的理解,但是正是这个特性,使得它能够出色地解决io问题(多路查找树的高度低于其它二叉树,高度越低查询数据需要进行的磁盘IO的次数相对就越少)。Mysql数据库中将一个节点的大小设置为Mysql数据库一页的大小,使每一个节点只需要一次IO就可以从磁盘加载到内存当中。

 

MyISAM引擎B树索引

     B-Tree 索引(或Balanced Tree),是一种很普遍的数据库索引结构。其特点是定位高效、利用率高、自我平衡,特别适用于高基数字段,定位单条或小范围数据非常高效。理论上,使用 B-Tree 在亿条数据与100条数据中定位记录的花销相同。 B-Tree 能加快数据的访问速度,因为存储引擎不再需要进行全表扫描来获取数据,数据分布在各个节点之中。

    MyISAM使用到了B-Tree索引,使用到了MyISAM引擎的表查询数据的时候使用的是那种索引,它都会去遍历对应的索引使用到的B-Tree,当遍历到对应索引值的时候就会在索引值对应的页上获取数据页的具体位置,然后将数据所在的页读取到内存当中。

  

 

InnoDB引擎B+树索引

    B+Tree 是在 B-Tree 基础上的一种优化,使其更适合实现外存储索引结构,InnoDB 存储引擎就是用 B+Tree 实现其索引结构。通常在 B+Tree 上有两个头指针,一个指向根节点,另一个指向关键字最小的叶子节点,而且所有叶子节点(即数据节点)之间是一种链式环结构。因此可以对 B+Tree 进行两种查找运算:一种是对于主键的范围查找和分页查找,另一种是从根节点开始,进行随机查找。

    Mysql数据库中InnoDB引擎用到的数据结构就是B+Tree索引,因为InnoDB引擎有使用到聚簇索引,所以如果我们数据库表使用的是InnoDB引擎的情况下查询数据如果用到了索引有两种情况。一种情况是用到的索引为聚簇索引,这个时候只需要遍历聚簇索引所在的B+Tree便可以找到我们想要的数据位置。还有一种情况是到了非聚簇索引,这种情况下需要先遍历使用到的索引的B+Tree知道对应聚簇索引的索引值,然后再通过聚簇索引的索引值去遍历聚簇索引的B+Tree来找到我们想要的数据。

    由此可见,我们在查询当中使用聚簇索引的效率是远高于使用非聚簇索引的,因为使用聚簇索引的情况下可以避免回表,减少磁盘IO的次数。

  

 

 

 

 

 

 

您可能感兴趣的文档:

--结束END--

本文标题: Mysql索引基本原理

本文链接: https://www.lsjlt.com/news/4843.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Mysql索引基本原理
      1.Mysql表空间、段、区、页     在讲索引的概念之前我们先说一下mysql中段区页的概念。     表空间是Mysql数据库存储的最高层,默认情况下InnoDB引擎只有一个表空间,所有的数据都是存放在这个表空间内。  ...
    99+
    2017-03-31
    Mysql索引基本原理
  • MySQL索引原理
    定义 索引(Index)是帮助MySQL高效获取数据的数据结构。那么什么数据结构可以用来高效的获取数据呢? 查看索引 mysql> show index from user; +-------+------------+----------...
    99+
    2020-02-14
    MySQL索引原理
  • 什么是MySQL索引原理及优化的基本步骤
    不知道大家之前对类似什么是MySQL索引原理及优化的基本步骤的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完什么是MySQL索引原理及优化的基本步骤你一定会有所收获...
    99+
    2022-10-18
  • MySQL索引的基本语法
         索引是排好序的数据结构!可以用在 where 条件查找的字段,和order by 排序的字段,有了索引,便可以快速地定位数据所在的物理地址并找出来。 索引的...
    99+
    2022-05-26
    MySQL 索引 MySQL 索引语法
  • MYSQL索引的基本概念
    本篇内容介绍了“MYSQL索引的基本概念”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! &nbs...
    99+
    2022-10-18
  • MySQL索引原理详解
    目录索引是什么索引数据结构树形索引树的动画为什么不是简单的二叉树?为什么不是红黑树?为什么最终选择B+树 而不是B树水平方向可以存放更多的索引key数据量估算叶子节点包含所有的索引字段叶子节点直接包含双向指针,范围查找效...
    99+
    2022-08-19
    MySQL索引原理 MySQL索引
  • MySQL索引失效原理
    目录1、索引失效原因2、再来看看哪些情况会破坏索引的有序性。 - 对索引字段做函数操作 - 隐式类型转换 - 隐式字符编码转换 3、总结 1、索引失效原因 首先看看哪些情况下,将会导...
    99+
    2022-11-12
  • 如何理解MySQL索引原理
    本篇内容主要讲解“如何理解MySQL索引原理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解MySQL索引原理”吧!案例背景假设面试官问你:在电商平台的订...
    99+
    2022-10-19
  • MySql索引原理与操作
    目录1. 什么是索引2. 索引的实现原理3. 添加索引的条件4. 索引的操作1. 创建索引2. 删除索引3. 查看一个sql语句是否使用了索引进行检索5. 索引的失效6. 索引的类型1. 什么是索引 索引是在数据库表的字...
    99+
    2022-09-16
  • mysql索引的工作原理
    小编给大家分享一下mysql索引的工作原理,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MySQL中索引的简介在MySQL中,索...
    99+
    2022-10-18
  • 什么是MySQL索引原理
    下面一起来了解下什么是MySQL索引原理,相信大家看完肯定会受益匪浅,文字在精不在多,希望什么是MySQL索引原理这篇短内容是你想要的。 索引原理&本质MySQL官方解释:索引是为MySQ...
    99+
    2022-10-18
  • MySQL索引原理是什么
    这篇文章主要介绍MySQL索引原理是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!摘要: 就一起来聊一聊MySQL索引。 什么是索引? 百度百科是这样描述的: 索引是为来加速对表...
    99+
    2022-10-18
  • MySQL索引基础
    介绍     索引用于加快数据访问的速度。把计算机的磁盘比作一本字典,索引就是字段的目录,当我们想快速查到某个词语的时候只需要通过查询目录找到词语所在的页数,然后直接打开某页就可以。MySQL最常用的索引是...
    99+
    2022-10-18
  • linux一些基本命令与mysql索引
    Linux的一些基本命令:在Linux中大部分的操作都是通过终端来实现的,或者直接使用命令行界面,一般使用Linux架构服务器的话,安装的都是命令行界面,不安装图形化界面的原因是因为没有必要,并且对于服务器...
    99+
    2022-10-18
  • 什么是mysql的索引原理
    下面讲讲关于mysql的索引原理,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完mysql的索引原理这篇文章你一定会有所受益。      ...
    99+
    2022-10-18
  • MySQL的InnoDB索引原理详解
      摘要:   本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节。   InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档)。本着高效学习的...
    99+
    2022-05-18
    mysql InnoDB
  • MySQL的索引原理是什么
    本篇内容介绍了“MySQL的索引原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、索引的本质索引...
    99+
    2022-10-18
  • MySQL索引的原理是什么
    本篇内容介绍了“MySQL索引的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!索引,可能让好很多...
    99+
    2022-10-18
  • MySQL索引的理解学习,面试不问索引原理就是事务原理
    目录 MySQL执行SQL的整体流程 引言, MySQL索引底层学习原因 磁盘介绍(理解磁盘IO) 索引底层数据结构B+树 B+树(聚集索引) B+树(辅助索引) 思考一下为何使用B+树结构, 不是B树, 不是平衡树二叉树,红黑树? 索引总...
    99+
    2023-09-28
    面试 学习 mysql 索引
  • MySQL分页的基本原理
    这篇文章主要介绍“MySQL分页的基本原理”,在日常操作中,相信很多人在MySQL分页的基本原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL分页的基本原理”的疑惑...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作