首页 数据库 mysql教程 2014阿里实习生面试题MySQL如何实现索引的

2014阿里实习生面试题MySQL如何实现索引的

Jun 07, 2016 pm 04:48 PM
mysql索引

【相关专题推荐:mysql面试题(2020)】

在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,比如MyISAM和InnoDB存储引擎。

MyISAM索引实现:

MyISAM存储引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。MyISAM的索引方式也叫做“非聚集”的,之所以这么称呼是为了与InnoDB的聚集索引区分。

InnoDB索引实现:

虽然InnoDB也使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同。

第一个重大区别是:InnoDB的数据文件本身就是索引文件。

第二个与MyISAM索引的不同是:InnoDB的辅助索引data域存储相应记录主键的值而不是地址。聚集索引这种实现方式使得按主键的搜索十分高效,,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。

其实,数据库索引的实现可以采用红黑树,B-Tree树数据结构。

但是为什么实际上采用的B+Tree呢?

这要从计算机存储原理和操作系统相关知识说起。因为数据表的索引比较大,不能常驻内存,所以以文件形式存储在磁盘中。所以当查询数据的时候就需要I/O操作。高效率查询的目标是较少I/O次数。一次I/O一般读取一页(一般为4k)大小的数据(局部性原理)。如此,在B-树中,每当申请一个新结点时,就以页的大小来申请。也就是说一次I/o可以读取一个一个结点(包含很多key)的数据;而在红黑树结构结构中,逻辑相邻的结点物理上不一定相邻,就是说,读取同等的数据需要多次I/O。所以选择B-树效率更好。

那为何最终选了B+树呢?

因为B+树内节点去掉了data域,因此可以拥有更大的出度,就是说一个结点可以存储更多的内结点,那么I/O效率更高。

了解不同存储引擎的索引实现方式对于正确使用和优化索引都非常有帮助,例如知道了InnoDB的索引实现后,就很容易明白为什么不建议使用过长的字段作为主键,因为所有辅助索引都引用主索引,过长的主索引会令辅助索引变得过大。再例如,用非单调的字段作为主键在InnoDB中不是个好主意,因为InnoDB数据文件本身是一颗B+Tree,非单调的主键会造成在插入新记录时数据文件为了维持B+Tree的特性而频繁的分裂调整,十分低效,而使用自增字段作为主键则是一个很好的选择。

聚集索引与非聚集索引之分:

InnoDB是聚集索引,因为它的B+树的叶结点包含了完整的数据记录。而MyISAM方式B+树的叶结点只是存储了数据的地址,故称为非聚集索引。

索引使用策略及优化

MySQL的优化主要分为结构优化(Scheme optimization)和查询优化(Query optimization)。

相关学习推荐:mysql教程

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系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.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 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索引(B树,哈希,全文,空间)。 说明不同类型的MySQL索引(B树,哈希,全文,空间)。 Apr 02, 2025 pm 07:05 PM

MySQL支持四种索引类型:B-Tree、Hash、Full-text和Spatial。1.B-Tree索引适用于等值查找、范围查询和排序。2.Hash索引适用于等值查找,但不支持范围查询和排序。3.Full-text索引用于全文搜索,适合处理大量文本数据。4.Spatial索引用于地理空间数据查询,适用于GIS应用。

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

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

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

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

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

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

See all articles