首页 数据库 mysql教程 MySQL索引的原理

MySQL索引的原理

Jun 18, 2019 am 09:46 AM
mysql索引

MySQL索引的原理

MySQL数据库支持多种索引,例如B树索引、哈希索引、全文索引等,本文着重讲解下B树索引。(推荐:《mysql教程》)

索引原理&本质

MySQL官方解释:索引是为MySQL提高获取数据效率的数据结构,为了快速查询数据。索引是满足某种特定查找算法的数据结构,而这些数据结构会以某种方式指向数据,从而实现高效查找数据。

B+树

MySQL一般以B+树作为其索引结构,那么B+树有什么特点呢?

树度为n的话,每个节点指针上限为2n+1

非叶子节点不存储数据,只存储指针索引;叶子节点存储所有数据,不存储指针

在经典B+树基础上增加了顺序访问指针,每个叶子节点都有指向相邻下一个叶子节点的指针,如图所示。主要为了提高区间访问的性能,例如要找key为20到50的所有数据,只要按着顺序访问路线一次性访问所有数据节点。

10ef020552105aa298b03389f7d696c.png

带顺序访问的B+树简图

局部性原理和磁盘预读

那么为什么数据库系统普遍使用B+树作为索引结构,而不选例如红黑树其他结构呢?

首先要先来介绍下局部性原理和磁盘预读的概念。

一般来说,索引本身较大,不会全部存储在内存中,会以索引文件的形式存储在磁盘上。所以索引查找数据过程中就会产生磁盘IO操作,而磁盘IO相对于内存存取非常缓慢,因此索引结构要尽量减少磁盘IO的存取次数。

为了减少磁盘IO,磁盘往往会进行数据预读,会从某位置开始,预先向后读取一定长度的数据放入内存,即局部性原理。因为磁盘顺序读取的效率较高,不需要寻道时间,因此可以提高IO效率。

预读长度一般为页的整数倍,主存和磁盘以页作为单位交换数据。当需要读取的数据不在内存时,触发缺页中断,系统会向磁盘发出读取磁盘数据的请求,磁盘找到数据的起始位置并向后连续读取一页或几页数据载入内存,然后中断返回,系统继续运行。而一般数据库系统设计时会将B+树节点的大小设置为一页,这样每个节点的载入只需要一次IO。

以上是MySQL索引的原理的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

mysql索引失效的几种情况 mysql索引失效的几种情况 Feb 21, 2024 pm 04:23 PM

常见情况:1、使用函数或运算;2、隐式类型转换;3、使用不等于(!=或<>);4、使用LIKE操作符,并以通配符开头;5、OR条件;6、NULL值;7、索引选择性低;8、复合索引的最左前缀原则;9、优化器决策;10、FORCE INDEX和IGNORE INDEX。

mysql索引什么情况下会失效 mysql索引什么情况下会失效 Aug 09, 2023 pm 03:38 PM

mysql索引在不使用索引列进行查询、数据类型不匹配、前缀索引的使用不当、使用函数或表达式进行查询、索引列的顺序不正确、数据更新频繁和索引过多或过少情况下会失效。1、不使用索引列进行查询,为了避免这种情况,应该在查询中使用适当的索引列;2、数据类型不匹配,在设计表结构时,应该确保索引列和查询的数据类型匹配;3、前缀索引的使用不当,可使用前缀索引。

MySQL索引左前缀匹配规则 MySQL索引左前缀匹配规则 Feb 24, 2024 am 10:42 AM

MySQL索引最左原则原理及代码示例在MySQL中,索引是提高查询效率的重要手段之一。其中,索引最左原则是我们在使用索引优化查询的过程中需要遵循的一个重要原则。本文将围绕MySQL索引最左原则的原理进行介绍,并给出一些具体的代码示例。一、索引最左原则的原理索引最左原则是指在一个索引中,如果查询条件是由多个列组成的,那么只有按照索引中的最左侧列进行查询,才能充

mysql索引的分类有哪几种 mysql索引的分类有哪几种 Apr 22, 2024 pm 07:12 PM

MySQL 索引分为以下类型:1. 普通索引:匹配值、范围或前缀;2. 唯一索引:确保值唯一;3. 主键索引:主键列的唯一索引;4. 外键索引:指向另一表主键;5. 全文索引:全文搜索;6. 哈希索引:相等匹配搜索;7. 空间索引:地理空间搜索;8. 复合索引:基于多个列的搜索。

如何合理使用MySQL索引,优化数据库性能?技术同学须知的设计规约! 如何合理使用MySQL索引,优化数据库性能?技术同学须知的设计规约! Sep 10, 2023 pm 03:16 PM

如何合理使用MySQL索引,优化数据库性能?技术同学须知的设计规约!引言:在当今互联网时代,数据量不断增长,数据库性能优化成为了一个非常重要的课题。而MySQL作为最流行的关系型数据库之一,索引的合理使用对于提升数据库性能至关重要。本文将介绍如何合理使用MySQL索引,优化数据库性能,并为技术同学提供一些设计规约。一、为什么要使用索引?索引是一种数据结构,用

PHP与MySQL索引的数据更新和索引维护的性能优化策略及其对性能的影响 PHP与MySQL索引的数据更新和索引维护的性能优化策略及其对性能的影响 Oct 15, 2023 pm 12:15 PM

PHP与MySQL索引的数据更新和索引维护的性能优化策略及其对性能的影响摘要:在PHP与MySQL的开发中,索引是优化数据库查询性能的重要工具。本文将介绍索引的基本原理和使用方法,并探讨索引对数据更新和维护的性能影响。同时,本文还提供了一些性能优化策略和具体的代码示例,帮助开发者更好地理解和应用索引。索引的基本原理和使用方法在MySQL中,索引是一种特殊的数

如何在MySQL中创建唯一索引来确保数据唯一性 如何在MySQL中创建唯一索引来确保数据唯一性 Mar 15, 2024 pm 12:45 PM

标题:MySQL中创建唯一索引来确保数据唯一性的方法及代码示例在数据库设计中,确保数据的唯一性是非常重要的,可以通过在MySQL中创建唯一索引来实现。唯一索引可以保证表中某列(或列组合)的数值是唯一的,如果尝试插入重复值,MySQL会阻止这种操作并报错。本文将介绍如何在MySQL中创建唯一索引,同时提供具体的代码示例。什么是唯一索引唯一索引是一种索引类型,它

MySQL索引是什么 MySQL索引是什么 Aug 31, 2023 pm 05:43 PM

MySQL索引是一种用于提高数据库查询性能的数据结构。它是在数据库表中的一个或多个列上创建的,以帮助数据库系统快速定位和检索数据。索引可以类比为书籍的目录,它们提供了快速访问数据的方式,而不需要扫描整个表,通过合理地创建索引,可以加快查询速度,提高数据库的性能。

See all articles