MySQL 聚集与非聚集索引

文章目录

  • 1.聚集索引
    • 1.1 介绍
    • 1.2 优点
    • 1.3 缺点
  • 2.非聚集索引
  • 3.区别
  • 参考文献

MySQL 中,根据索引树叶结点存放数据行还是数据行的地址,可以将索引分为两类:

  • 存放数据行:聚集索引
  • 存放数据行地址:非聚集索引

InnoDB 使用聚集索引,MyISAM 使用非聚集索引。

1.聚集索引

1.1 介绍

聚集索引(Clustered Index)也叫聚簇索引,一般以主键建立索引。

在 InnoDB 中如果没有定义主键,会选择第一个非空唯一索引来代替。如果没有这样的索引,InnoDB 会自动生成一个不可见的列名为 ROW_ID,索引名为 GEN_CLUST_INDEX 的聚簇索引,该列是一个 6 字节的自增数值,随着插入而自增。

聚集索引(Clustered Index)的索引和表数据放在一个文件,行数据存储存在索引树叶子结点上,通过索引可直接获得行数据

在这里插入图片描述

与聚集索引配套使用的是二级索引(Secondary Indexes),也叫辅助索引。

一个表可以有多个二级索引。

二级索引树叶子结点存储的是主键。

若对非主键字段建立的索引就是二级索引,根据二级索引搜索,则需要两步:

  1. 第一步在二级索引(辅助索引)B+ 树中检索,到达其叶子结点获取对应的主键。
  2. 第二步使用主键在主键索引 B+ 树中再执行一次 B+ 树检索操作,最终到达叶子节点即可获取行数据。

在这里插入图片描述

1.2 优点

  • 主键查询效率更高

通过主键使用聚集索引查找数据比非聚集索引要快,因为非聚集索引定位到对应主键时还要多一次目标记录磁盘 IO,即回表查询。

  • 范围查询效率更高

聚集索引存储记录,记录物理存储按照索引排序,物理上有序。因此范围查询(例如,使用 BETWEEN、>、< 等条件)可以更有效地利用磁盘上的顺序数据。而非聚集索引是逻辑上有序,物理存储并不有序。

  • 辅助索引易维护

当出现行移动或者数据页分裂(Page Split)时,InnoDB 无须更新辅助索引。

数据页是存储数据行的物理存储单元,它通常包含一定数量的数据行,以及用于管理数据页的页头信息。

页分裂指的是当一个数据页已经满了,需要插入一条新的记录但无法容纳时,数据库引擎将尝试重新组织页上的数据,将一部分数据移动到新的页上,从而为新记录腾出空间。

1.3 缺点

  • 二级索引访问需要两次索引查找。

第一次找到主键值,第二次根据主键值找到行数据。

  • 更新主键的代价高。

因为将会导致被更新的行发生移动,所以 InnoDB 表主键一般定义为不可更新。

  • 插入速度严重依赖于插入顺序。

按照主键顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于 InnoDB 表,我们一般都会定义一个自增的 ID 列为主键。

2.非聚集索引

按照语义,除了聚集索引,其他索引都是非聚集索引。

但在这里非聚集索引特指索引树叶结点存储的是「索引+数据地址」的索引。

非聚集索引(Nonclustered Index)的索引文件和表数据是分开的,主键索引和二级索引存储上没有任何区别。使用 B+ 树存储索引,所有节点都是索引,叶子结点存储的是「索引+数据地址」。

在这里插入图片描述

3.区别

  • 数量不同。

一个表中只能有一个聚集索引,而非聚集索引可以有多个。

  • 磁盘 IO 次数不同。

聚集索引通过一次索引查询可以直接找到数据,而非聚集索引需要一次索引查询到数据地址,外加一次数据磁盘 IO。

  • 数据组织方式不同。

聚集索引的数据行在物理存储上是有序的,对于范围查询和排序操作,有序的物理存储结构也有助于减少磁盘 I/O 操作,提高查询性能。非聚集索引和数据行是分开两个文件存放,数据行在物理存储上是乱序的。

  • 读写性能不同。

聚集索引查询效率高,但插入效率低,因为需要移动数据的物理位置保证物理存储上有序。非聚集索引则反过来,插入效率高,查询效率低。


参考文献

15.6.2.1 Clustered and Secondary Indexes
索引常见面试题 - 小林coding

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux学习之文件系统与动静态库

目录 一&#xff0c;文件的管理 什么是磁盘&#xff1f; 磁盘的逻辑抽象结构 格式化 inode 挂载 软硬链接 二&#xff0c;动静态库 什么是动静态库&#xff1f; 1.站在库的制作者角度 静态库&#xff1a; 制作一个静态库 2.站在静态库使用者的角度 动态库 作为制…

windows安装PostgreSQL后进行远程连接,发生SSL错误

1. 报错情况 SSL 关闭 的 pg_hba.conf 记录 (pgjdbc: autodetected server-encoding to be GB2312, if the message is not readable, please check database logs and/or host, port, dbname, user, password, pg_hba.conf) 或是乱码提示&#xff0c;提示中有SSL、 pg_hba.con…

C语言KR圣经笔记 5.12 复杂声明

5.12 复杂声明 C 语言有时会因为声明的语法而受到谴责&#xff0c;特别是涉及函数指针的声明语法。语法试图使声明和使用一致&#xff1b;在简单的情况下它的效果不错&#xff0c;但在更复杂的情况下会让人困惑&#xff0c;因为声明不能从左往右读&#xff0c;而且括号被过度使…

RabbitMQ快速上手

首先他的需求实在什么地方。我美哟明显的感受到。 它给我的最大感受就是脱裤子放屁——多此一举&#xff0c;的感觉。 他将信息发送给服务端中间件。在由MQ服务器发送消息。 服务器会监听消息。 但是它不仅仅局限于削峰填谷和稳定发送信息的功能&#xff0c;它还有其他重要…

Nacos(先解释专属名词,然后大白话讲解+安装配置教程+代码实例 信我,看了必会!!点进来吧各位大佬们)

Nacos 先来一个注意&#xff1a;以下涉及到配置和项目的创建&#xff0c;我的jdk是jdk17&#xff0c;idea是2023.2.4&#xff0c;并且是社区版的idea 1.什么是Nacos Nacos是Dyamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态…

重生奇迹MU平民玩家推荐的职业

女魔法师 女魔法师是一个非常适合平民玩家的职业选择。她拥有着强大的魔法攻击能力&#xff0c;可以轻松地击败敌人。而且女魔法师的装备价格相对较低&#xff0c;适合玩家们的经济实力。 精灵射手 精灵射手是一个非常灵活的职业选择。他们可以远程攻击&#xff0c;可以在战…

数据结构之生成树及最小生成树

数据结构之生成树及最小生成树 1、生成树概念2、最小生成树 数据结构是程序设计的重要基础&#xff0c;它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发&#xff0c;分析和研究计算机加工的数据的特性&#xff0c;以便为应用所…

centos7 挂载windows共享文件夹报错提示写保护

centos7挂载windows共享时&#xff0c;提示被共享的位置写保护&#xff0c;只能以只读方式挂载&#xff0c;紧接着就是以只读方式挂载失败 原因是组件少装了 yum install cifs-utils 安装完后&#xff0c;正常挂载使用。 下载离线安装包 下载离线包下载工具 下载离线安装包…

神经网络:表述(Neural Networks: Representation)

1.非线性假设 无论是线性回归还是逻辑回归&#xff0c;当特征太多时&#xff0c;计算的负荷会非常大。 案例&#xff1a; 假设我们有非常多的特征&#xff0c;例如大于 100 个变量&#xff0c;我们希望用这 100 个特征来构建一个非线性的多项式模型&#xff0c;结果将是数量非…

在windows环境下安装hadoop

Hadoop是一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下&#xff0c;开发分布式程序。但这个架构是基于java语言开发的&#xff0c;所以要先进行jdk的安装&#xff0c;如果电脑已经配置过jdk或者是曾经运行成功过java文件&#xff0c;那就可以跳过第一步。 …

可解释性人工智能(XAI)概述

文章目录 每日一句正能量前言可解释性人工智能&#xff08;XAI&#xff09;定义研究的作用应用领域XAI的目标后记 每日一句正能量 一个人若想拥有聪明才智&#xff0c;便需要不断地学习积累。 前言 人工智能&#xff08;AI&#xff09;的发展速度迅猛&#xff0c;并在许多领域…

消息中间件之八股面试回答篇:三、RabbitMQ如何解决消息堆积问题(100万条消息堆积)+RabbitMQ高可用性和强一致性机制+回答模板

RabbitMQ中的消息堆积问题 当生产者发送消息的速度超过了消费者处理消息的速度&#xff0c;就会导致队列中的消息堆积&#xff0c;直到队列存储消息达到上限。之后发送的消息就会成为死信&#xff0c;可能会被丢弃&#xff0c;这就是消息堆积问题。 解决消息堆积有三种种思路…

【学网攻】 第(13)节 -- 动态路由(OSPF)

系列文章目录 目录 系列文章目录 文章目录 前言 一、动态路由是什么&#xff1f; 二、实验 1.引入 实验拓扑图 实验配置 实验验证 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学…

什么是数据库的三级模式两级映象?

三级模式两级映象结构图 概念 三级模式 内模式&#xff1a;也称为存储模式&#xff0c;是数据物理结构和存储方式的描述&#xff0c;是数据在数据库内部的表示方式。定义所有的内部记录类型、索引和文件组织方式&#xff0c;以及数据控制方面的细节。模式&#xff1a;又称概念…

Ubuntu20.04安装Google浏览器

一.在 Ubuntu 上安装 Google Chrome Chrome 不是一个开源的浏览器&#xff0c;并且它不被包含在标准的 Ubuntu 软件源中。在 Ubuntu 中安装 Google Chrome 是一个非常直接的过程。我们将会从官方网站下载安装文件&#xff0c;并且通过命令行工具来安装它。 1.1 下载 Google Ch…

Cesium材质特效

文章目录 0.引言1.视频材质2.分辨率尺度3.云4.雾5.动态水面6.雷达扫描7.流动线8.电子围栏9.粒子烟花10.粒子火焰11.粒子天气 0.引言 现有的gis开发方向较流行的是webgis开发&#xff0c;其中Cesium是一款开源的WebGIS库&#xff0c;主要用于实时地球和空间数据的可视化和分析。…

函数式接口当参数使用

如果函数式接口作为一个方法的参数&#xff0c;就以为着要方法调用方自己实现业务逻辑&#xff0c;常见的使用场景是一个业务整体逻辑是不相上下的&#xff0c;但是在某一个步骤有不同的逻辑&#xff0c;例如数据处理有不同的策略。上代码 package com.dj.lambda;import java.…

加密域可逆信息隐藏算法分类及评价指标

一、加密域可逆信息隐藏算法框架分类 加密图像可逆信息隐藏(RDHEI)是将图像加密和信息隐藏结合使用的一种技术。图像拥有者先对原始图像使用加密密钥keyc进行加密&#xff0c;信息隐藏者根据隐藏密钥keyd将秘密信息嵌入到密文图像中去。在接收端&#xff0c;接收者根据密钥key…

【Docker】快速入门手册

目录 1.概述 1.1.安装 1.2.阿里云镜像加速 1.3.运行原理 2.常用操作 2.1.帮助命令 2.2.镜像操作 2.3.容器操作 2.3.1创建、启动 2.3.2.退出、停止 2.3.3.进入交互式界面 2.3.4.守护式容器交互 2.3.5.查看 2.3.6.删除 2.3.7.拷贝 3.容器数据卷 3.1.概述 3.2.使…

linux03 用户权限

01.三种权限 02.UGO&#xff08;root账号&#xff09; 查看权限 不在root文件中写&#xff0c;是因为其他用户不能进来 举个例子 ll是ls -l 第一部分&#xff1a;权限&#xff08;11个字节&#xff09; 第一个&#xff1a;d/- d表示文件夹 - 表示一般文件 二到四&#xff1a…