聚簇索引及其优缺点

简介: 聚簇索引是一种数据存储方式,InnoDB通过主键构建B+树组织数据,叶子节点即数据页。若无主键,则选非空唯一索引或隐式创建主键。辅助索引(二级索引)需两次查找:先查主键值,再查数据行。优点是查询快,尤其主键排序与范围查询;缺点是插入依赖顺序,更新主键代价高,且易引发页分裂。

聚簇索引并不是单独的索引类型,而是一种数据存储方式。
B+树索引分为聚簇索引和非聚簇索引,主键索引就是聚簇索引的一种,非聚簇索引有复合索引、前缀索引、唯一索引。
在innodb存储引擎中,表数据本身就是按B+树组织的一个索引结构,聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚簇索引的叶子节点成为数据页。
Innodb通过主键聚集数据,如果没有定义主键,innodb会选择非空的唯一索引代替。如果没有这样的索引,innodb会隐式的定义一个主键来作为聚簇索引。
非聚簇索引又称为辅助索引,InnoDB访问数据需要两次查找,辅助索引叶子节点存储的不再是行的物理位置,而是主键值。通过辅助索引首先找到的是主键值,再通过主键值找到数据行的数据页,找到数据页对应数据行。
Innodb辅助索引的叶子节点并不包含行记录的全部数据,叶子节点除了包含键值外,还包含了相应行数据的聚簇索引键。一张表可有多个二级索引。
优点:
数据访问更快,因为聚簇索引将索引和数据保存在同一个B+树中,因此从聚簇索引中获取数据比非聚簇索引更快。聚簇索引对于主键的排序查找和范围查找速度非常快。
缺点:
插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键。更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新。二级索引访问要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据。

相关文章
|
存储 关系型数据库 数据库
聊多版本并发控制(MVCC)
MVCC是数据库并发控制技术,用于减少读写冲突。它维护数据的多个版本,使事务能读旧数据而写新数据,无需锁定记录。当前读获取最新版本,加锁防止修改;快照读不加锁,根据读取时的读视图(readview)决定读哪个版本。InnoDB通过隐藏字段(DB_TRX_ID, DB_ROLL_PTR)和undo log存储版本,readview记录活跃事务ID。读已提交每次读取都创建新视图,可重复读则在整个事务中复用一个视图,确保一致性。MVCC通过undo log版本链和readview规则决定事务可见性,实现了非阻塞并发读。
1918 5
聊多版本并发控制(MVCC)
|
5月前
|
人工智能 自然语言处理 Linux
OpenClaw(Clawdbot)新手完整学习路径:阿里云/本地部署+百炼API配置+集成/使用/开发Skill+避坑指南
对零基础用户而言,学习OpenClaw(原Clawdbot)的核心痛点并非“技术难度”,而是“路径混乱”——不清楚先学什么、再练什么,容易在部署环节卡壳,或因技能安装过多导致功能冲突。2026年最新版OpenClaw已完成核心架构升级,采用“微内核+网关+技能插件”的轻量化设计,同时优化了对阿里云的适配与本地部署流程,让新手可通过“认知建立→环境部署→API配置→技能实战→进阶优化”的五步路径,在1周内实现从“零基础”到“熟练使用”的跨越。
1861 1
|
存储 人工智能 运维
阿里云 Tair 基于 3FS 工程化落地 KVCache:企业级部署、高可用运维与性能调优实践
阿里云 Tair KVCache 团队联合硬件团队对 3FS 进行深度优化,通过 RDMA 流量均衡、小 I/O 调优及全用户态落盘引擎,提升 4K 随机读 IOPS 150%;增强 GDR 零拷贝、多租户隔离与云原生运维能力,构建高性能、高可用、易管理的 KVCache 存储底座,助力 AI 大模型推理降本增效。
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
84_负提示:控制hallucination
在大语言模型(LLM)应用的浪潮中,我们常常惊叹于这些模型展现出的强大能力——它们能够进行复杂推理、生成高质量内容、回答专业问题,甚至进行创意写作。然而,与此同时,LLM也面临着一个显著的挑战:幻觉(hallucination)问题。这些"胡言乱语"或"无中生有"的内容不仅可能误导用户,还可能在关键应用场景中造成严重后果。
948 0
|
11月前
|
弹性计算
亲测:阿里云备案流程及操作步骤(图文教程)
阿里云备案流程共五步,最快2天完成。先提交材料,阿里云初审(1天),再提交管局,用户进行短信核验,最后等待管局审核(1-20天)。全程最快2天,最慢约21天。需使用中国大陆地域云服务器,个人或企业均可备案。
1193 3
|
6月前
|
SQL Oracle 关系型数据库
迁移MySQL数据到Oracle实践记录
本文介绍SQL Developer迁移第三方数据库至Oracle的三种方式:①全库迁移(步骤繁杂、易报ORA-00942等错);②右键“Copy To Oracle”单表迁移(支持结构+数据,百兆级高效);③结合DBeaver导CSV+SQL Dev建表导入(500MB内可行)。推荐中小规模表级迁移。
456 0
|
8月前
|
存储 关系型数据库 MySQL
为什么MySQL索引结构是B+tree ?
MySQL采用B+树作为索引结构,因其非叶子节点仅存键值与指针,可存储更多键,降低树高,提升查询效率。数据集中于叶子节点并形成双向链表,支持高效稳定的范围查询。通常树高为2-3层,即可容纳上千万数据,显著优于二叉树或B树。
|
8月前
|
SQL 安全 关系型数据库
了解SQL注入
SQL注入是利用Web应用输入验证缺陷,将恶意SQL代码插入查询语句,从而操控数据库的攻击方式。常见后果包括绕过登录、数据泄露、篡改或删除数据,甚至远程执行系统命令。攻击者可通过构造特殊输入改变SQL逻辑,如使用`'--`注释密码验证部分,实现未授权访问。盲注技术则在无直接数据回显时通过响应延迟等判断执行情况。防御需结合输入验证(白名单优于黑名单)、参数化查询、错误信息屏蔽及网络层防护如IPS,综合提升安全性。
|
存储 机器学习/深度学习 人工智能
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
|
Cloud Native 关系型数据库 分布式数据库