【数据库】索引必知必会

news2024/11/25 18:45:32

  • 什么是索引
  • 索引的好处
  • 索引的坏处
  • 创建索引的三种方式
  • 索引类型
  • 索引数据结构
  • Hash表
    • B树
    • B+树
    • B树和B+树的区别
    • B+树的最大优点
  • 面试题
    • 为什么索引结构默认使用B+树,而不是B-Tree,Hash哈希,二叉树,红黑树?
  • 聚簇索引
  • 非聚簇索引
  • 聚簇索引和非聚簇索引的区别

什么是索引

数据库中索引(Index)是一种帮助快速查找数据的数据结构,可以把它理解为书的目录,通过索引能够快速找到数据所在位置。

索引的好处

  1. 使用索引可以加快数据查找的效率,这是创建索引的最主要原因。

  2. 场景的索引数据结构有:Hash表(通过hash算法快速定位数据,但不适合范围查询,因为需要每个key都进行一次hash)、二叉树(查找和修改效率都比较高),但是在InnoDB引擎中使用的索引是B+Tree,相较于二叉树,B+Tree这种多叉树,更加矮宽,更适合存储在磁盘中。

  3. 通过创建唯一性索引,可以保证数据表中每一行数据的唯一性。

索引的坏处

使用索引增加了数据查找的效率,但是相对的由于索引也需要存储到磁盘,所以增加了存储的压力,并且新增数据时需要同步维护索引。但是合理的使用索引能够极大提高我们的效率!

创建索引的三种方式

  1. 在执行create table时创建索引

    create table user_index(
    id  int  auto_increment   primary key,
    first_name   varchar(16),
    last_name   varchar(16),
    id_card        varchar(18),
    information   text(225),
    key    name( first_name,last_name),
    fulltext   key(information),
    unique key(id_card));
    
  2. 使用alter table添加索引

    alter table table_name add index  index_name(column_list);
    
  3. 使用create index命令创建索引

    create index index_name on table_name(column_list);
    

索引类型

  • 普通索引

    create index index_name on table_name(column_list);
    
  • 唯一索引

    create index index_name on table_name(column_list);
    
  • 主键索引

    CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) )
    
  • 组合索引

    ALTER TABLE `table` ADD INDEX name_city_age (name,city,age);
    
  • 全文索引

索引数据结构

Hash表

Hash索引不支持顺序和范围查找。

B树

B树是平衡的多叉搜索树。

B+树

为了提高查找速度,其常用的数据结构是一个N叉搜索树。

img

B树和B+树的区别

  • B 树的所有节点既存放键(key) 也存放 数据(data),而 B+树只有叶子节点存放 key 和 data,其他内节点只存放 key。

  • B 树的叶子节点都是独立的;B+树的叶子节点有一条引用链指向与它相邻的叶子节点。

  • B 树的检索的过程相当于对范围内的每个节点的关键字做二分查找,可能还没有到达叶子节点,检索就结束了。而 B+树的检索效率就很稳定了,任何查找都是从根节点到叶子节点的过程,叶子节点的顺序检索很明显。

B+树的最大优点

  1. 非常善于范围查找

  2. 所有的查询最终都是落在叶子结点上,查询速度树比较稳定的。

  3. 由于叶子结点是数据的全集,因此就可以把叶子结点存到硬盘上,非叶子结点直接存到内存中,又进一步的大大降低了读取硬盘的次数。

面试题

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

  • Hash哈希,只适合等值查询,不适合范围查询。还会产生哈希冲突。
  • 一般二叉树,可能会特殊化为一个链表,相当于全表扫描。
  • 红黑树,是一种特化的平衡二叉树,MySQL 数据量很大的时候,索引的体积也会很大,内存放不下的而从磁盘读取,树的层次太高的话,读取磁盘的次数就多了。
  • B-Tree,叶子节点和非叶子节点都保存数据,相同的数据量,B+树更矮壮,也是就说,相同的数据量,B+树数据结构,查询磁盘的次数会更少。

综上,索引更适用于查找多,修改少的场景。

聚簇索引

叶子结点同时存放索引和数据。注意:聚簇索引中叶子节点存储的是行数据

非聚簇索引

索引和数据分开存放。在叶子节点中存放的是数据行的主键索引。通过非聚簇索引进行查询,会先得到一个主键ID,之后再使用主键ID去聚簇索引中的叶子节点查找数据行。

聚簇索引和非聚簇索引的区别

两者主要的区别是存储数据的不同。

  • 聚簇索引叶子节点存储的是行数据;而非聚簇索引叶子节点存储的是聚簇索引(通常是主键 ID)。
  • 聚簇索引查询效率更高,而非聚簇索引需要进行回表查询,性能不如聚簇索引。
  • 聚簇索引一般为主键索引,而主键一个表中只能有一个,因此聚簇索引一个表中也只能有一个,而非聚簇索引则没有数量上的限制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/417551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚马逊云科技云创计划,打造创新创业生态系统

在充满着不确定性的2022年,电子消费市场一片哀鸿遍野,智能家居行业却如同逆水行舟,显示出稳健的发展之势,宣告着智能家居时代已来。在2023年3月24日举办的“智能家居,出海闭门会”上,为进一步发挥产业带潜力…

C#基础学习--转换

目录 什么是转换 隐式转换 显式转换和强制转换 ​编辑 转换的类型 数字的转换 ​编辑 隐式数字转换 溢出检测上下文 显式数字转换 引用转换 隐式引用转换 显式引用转换 有效显式引用转换 装箱转换 装箱是创建副本 装箱转换 拆箱转换 用户自定义转换 用户自定义…

学习/cmake-cookbook/chapter-01/recipe-07/example

代码链接:cmake-cookbook/chapter-01/recipe-07/example at master dev-cafe/cmake-cookbook GitHub BUG 是告诉如G之类的编译器在每个translation unit中定义macro NDEBUG,进而导致所有assert()都被关闭!合法取值是Debug,Rele…

MongoDB部署的10个最佳实践

MongoDB是一个非关系文档数据库,支持类似JSON的存储。其灵活的数据模型使您可以轻松存储非结构化数据。它于2009年首次发布,是最常用的NoSQL数据库。它的下载量已超过325亿次。 MongoDB在开发人员中很受欢迎,因为它很容易上手。多年来&#x…

ATTCK v12版本战术实战研究——提权(一)

一、概述 前几期文章中,我们中介绍ATT&CK 14项战术中提权战术(一),包括提权前6项子技术。那么从前文中介绍的相关提权技术来开展测试,进行更深一步的分析。本文主要内容是介绍攻击者在运用提权技术时,…

LeetCode 112 路径总和

题目: 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 示例 1…

Spring Boot概述(一)

1. SpringBoot 概述 1.1 SpringBoot 概念 SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的…

数字化时代,如何通过社媒找到外贸客户?

随着全球化的深入发展,外贸客户的开发变得越来越重要。而在如今的数字化时代,社交媒体已经成为了企业开发外贸客户的重要渠道之一。本文好选客小编将从选择社媒找外贸客户的原因和方法等方面,为您介绍如何通过社媒找到外贸客户。 图片出处&am…

洛谷P8706 [蓝桥杯 2020 省 AB1] 解码 C语言/C++

[蓝桥杯 2020 省 AB1] 解码 题目描述 小明有一串很长的英文字母,可能包含大写和小写。 在这串字母中,有很多连续的是重复的。小明想了一个办法将这串字母表达得更短:将连续的几个相同字母写成字母 出现次数的形式。 例如,连续…

【蓝桥杯省赛真题38】Scratch流星坠落 少儿编程scratch编程蓝桥杯省赛比赛真题讲解

目录 scratch流星坠落 一、题目要求 编程实现 二、案例分析 1、角色分析

vue3中使用swiper及遇到的问题

vue3中使用swiper 一、安装swiper二、使用swiper三、echarts+swiper一、安装swiper 使用npm install swiper安装swpier插件 npm install swiper -s // @9.2.0 // 或者安装指定版本 npm install swiper@8.4.7 -s二、使用swiper 直接按照官网的引用方法,项目会报错 解决方法:…

【复现论文】Looking here or there? Gaze Following in 360-Degree Images

【复现论文】Looking here or there? Gaze Following in 360-Degree Images 论文:Looking here or there? Gaze Following in 360-Degree Images 论文链接:Looking here or there? Gaze Following in 360-Degree Images 复现github链接&#xff1a…

List集合以及它的实现类和队列、栈

List集合 Collection层次的结构接口中,一些允许有重复的元素,例如:List接口。而另外一些不允许有重复的元素,例如:Set接口。其中也分为了有序与无序的(存储顺序)。 在JDK中没有提供Collection…

ppt文件太大怎么变小,这6种方式很简单

ppt文件太大怎么变小? ppt文件通常用于公司会议、教育授课和商务演讲等场合,由于需要实现各种文档效果并插入大量图片,因此文件大小要远大于普通文档文件,占用的存储空间也不少。如果电脑中存储了大量PPT文件,并且不方…

不服不行!盘点那些编程界的天才少年,11岁参加国际比赛,靠奖金赚了40万美金

程序员是一项专业性极强的工作,需要很强的思维能力和动手能力,所以大多数程序员要比普通人更聪明,与其他职业相比,程序员应该是最爱学习的一行了。科技网络的发展太快,新的技术层出不穷,时刻都要更新自己的…

L2-041 插松枝 判断量少(PTA 天梯赛)

人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上,做成大大小小的松枝。他们的工作流程(并不)是这样的: 每人手边有一只小盒子,初始状态为空。每人面前有用不完的松枝干和一个推送器,每次推送一…

计算机组成原理第二章——数据的表示与运算(下)

提示:时光清浅处 一步一安然 文章目录前言2.3.1 浮点数的表示2.3.2 IEEE7542.2.3 浮点数的运算前言 本节主要讲三个问题,浮点数的表示,IEEE 754标准,浮点数的加减运算 2.3.1 浮点数的表示 浮点数的作用和基本原理 定点数可表示…

由浅入深了解HashMap源码

由经典面试题引入,讲解一下HashMap的底层数据结构?这个面试题你当然可以只答,HashMap底层的数据结构是由(数组链表红黑树)实现的,但是显然面试官不太满意这个答案,毕竟这里有一个坑需要你去填&a…

Java容器使用注意点

前置:问题 判空集合转map集合遍历集合去重集合转数组数组转集合 一:集合判空 《阿里巴巴 Java 开发手册》的描述如下: 判断所有集合内部的元素是否为空,使用 isEmpty() 方法,而不是 size()0 的方式。 我们在开发中也…

AI大模型突围战

最近,GPT赛道上争议不断,先是GPT-4的问世,用一些亮眼的功能让人类感叹自己是不是要丢工作?紧接着又有一封联名信刷屏,图灵奖得主、AI三巨头之一的约书亚本吉奥、埃隆马斯克等123个业界大佬,呼吁所有人工智能…