首页 > 其他分享 >为什么索引结构默认使用B+Tree?为什么需要注意联合索引中的顺序?最左前缀原则是什么?

为什么索引结构默认使用B+Tree?为什么需要注意联合索引中的顺序?最左前缀原则是什么?

时间:2024-04-08 21:32:43浏览次数:22  
标签:为什么 前缀 Tree 查询 索引 磁盘 节点

(1)为什么索引结构默认使用B+Tree,而不是B-Tree,Hash,二叉树,红黑树?

B-tree:B+Tree相比于B-Tree,所有的数据都存储在叶子节点,并且叶子节点之间用指针相连形成了一个有序链表,这有利于范围查询和全表扫描时连续地读取磁盘上的数据,极大地降低了磁盘I/O次数。而在B-Tree中,数据分布在所有节点,不利于范围查询,IO代价高。

Hash:虽然可以快速定位,但是没有顺序,适合等值查询,不支持范围查询;基于Hash表实现,只有Memory存储引擎支持哈希索引;如果有大量重复键值得情况下,哈希索引的效率会很低,因为存在哈希碰撞问题。

二叉树:树的高度不均匀,不能自平衡,在大规模数据插入后容易退化为链表形式,导致深度增大,查找效率变低,并且IO代价高,不适合磁盘存储。

红黑树:虽然保证了平衡性,但它仍然可能导致树的高度随着数据量的增长而增加,同样面临较多的磁盘I/O问题。同时,红黑树的每个节点存储的数据有限,对于大数据量的场景,其索引体积可能过大,不便于范围查询。

(2)联合索引是什么?为什么需要注意联合索引中的顺序

MySQL可以使用多个字段同时建立一个索引,叫做联合索引。在联合索引中,如果想要命中索引,需要按照建立索引时的字段顺序挨个使用,否则无法命中索引。假设现在建立了"name,age"的联合索引,那么索引的排序是,先按照name排序,如果name相同,则按照age排序。一般情况下,将查询需求频繁或者字段选择性高的列放在前面。

(3)MySQL的最左前缀原则是什么?

最左前缀原则就是最左优先,在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。MySQL 会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配。

补充前缀索引是什么?

索引的字段可能非常长,这样既占内存空间,也不利于维护。所以,我们就只把很长字段的前面的公共部分作为一个索引,提高索引效率。但是,order by不支持前缀索引。

标签:为什么,前缀,Tree,查询,索引,磁盘,节点
From: https://blog.csdn.net/xiaozhi6yyy18/article/details/137524261

相关文章

  • 什么是Redis?Redis为什么这么快?Redis相比Memcached有哪些共同点和区别?
    (1)什么是Redis?简述它的优缺点?Redis为什么这么快?Redis本质上是一个Key-Value类型的内存数据库,把整个数据库加载在内存当中操作,定期通过异步操作把数据库中的数据复制到硬盘中。(异步操作,一种非阻塞执行任务的方式,其中任务的执行与结果的返回不会阻碍原者继续执行后续操作。)优点......
  • 今年考研是太卷了还是太水了,为什么分数线都高的离谱?
    25考研的备考形势,势必跟以前不一样了!有些人问,分数线那么高,是不是题目太水了?问的人肯定不是24考生。24的题,也就政治正常一点。其它的,英语难上热搜,数学难度空前,分数线不跌反涨?!往年的英语,最后用“定位法”“二分法”作文押题冲一冲刺,也许就行了,今年可能过不了线!往年的数学......
  • vscode为什么设置不了中文?
    VSCode中文插件安装在VSCode中设置中文的首要步骤是安装“Chinese(Simplified)LanguagePackforVisualStudioCode”扩展插件。这一过程十分简单,只需打开VSCode,进入扩展市场,搜索“Chinese(Simplified)LanguagePack”然后点击安装即可。安装完成后,需要通过命令面......
  • 电影特效渲染为什么费时间?「瑞云渲染」
    影视特效渲染过程通常耗时且资源密集,因为它涉及处理复杂的视觉元素和光影效果。瑞云渲染通过云技术提供解决方案,加快渲染速度并降低成本。简而言之,电影特效渲染之所以费时,是因为其对计算机资源的高需求。电影特效渲染费时间原因电影特效渲染费时的原因是多方面的,既包括技术层面......
  • MOGDB/openGauss索引推荐及虚拟索引
    MOGDB/openGauss索引推荐及虚拟索引索引推荐在ORACLE的优化中,可能大家有接触过SQLTuningAdvisor(SQL调优顾问,STA),类似的MOGDB/openGauss的索引推荐(Index-advisor)功能也可以对你的查询进行分析,并提出合理的创建索引的建议。ORACLE的STA输出是以一种意见或者建议的......
  • 为什么网站速度很重要?
    为什么网站速度很重要?摘要:如果网站加载时间很长,可能会对用户体验、网站流量和SEO产生不利影响。经过性能优化的网站相对于慢速网站更具优势。网站速度,也被称为页面加载速度或网站性能,是指用户访问网站时,从发出请求到浏览器完全加载并显示网页内容所需的时间。这个速度的快慢直接......
  • 都说程序员是吃青春饭,可为什么有那么多人转行当程序员?
    尽管有观点认为程序员是吃青春饭的职业,但实际上,转行成为程序员的原因多种多样,且与“吃青春饭”这一说法并不完全一致。首先,技术行业的快速发展和新技术的不断涌现要求程序员不断学习新知识,这可能导致一些人感到自己的技能过时,从而选择转行。此外,随着年龄的增长,程序员可能会面......
  • MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用
    数据结构我们知道MySQL的存储引擎Innodb默认底层是使用B+树的变种来存储数据的下面我们来复习一下B树存储+B树存储 +哈希存储的区别哈希存储,只能使用等值查询B树与B+树存储我们知道B+树实际上就是B树的变种那么为啥使用B+树而不是使用B树呢?我们知道效率的高低......
  • openGauss内存引擎中的索引
    一、索引索引是一种用于快速查询和检索数据的数据结构。常见的索引结构有:B树,B+树和Hash。索引的作用就相当于目录的作用。打个比方:我们在查字典的时候,如果没有目录,那我们就只能一页一页的去找我们需要查的那个字,速度很慢。如果有目录了,我们只需要先去目录里查找字的位置,......
  • vue快速入门(十二)v-key索引标志
    注释很详细,直接上代码新增内容v-key的使用场景数组筛选器的使用源码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0">&......