索引组织表

简介: 说明聚集索引及索引组织表的关系及使用场景,优势。

目前的表存储方式主要分为两种:索引组织表( Index-Organized Tables) 堆表(heap-organized tables)

  • oracle:默认堆表,支持索引组织表。
  • mysql:只支持索引组织表,对应的索引叫做聚集索引(cluster index)。
  • postgresql:只支持堆表

简单的一句话来概括两者的区别就是一种数据是有序存储(按主键id聚集),一种是无序存储。并不一定是哪一种结构更好,还是要看具体的业务适合哪种形式。

Index-Organized Tables 索引组织表

定义:

索引组织的表具有作为主B树的变体的存储组织。与其数据以无序集合(堆)存储的普通(堆组织的)表不同,以主键排序的方式将索引组织表的数据存储在B树索引结构中。索引结构中的每个叶块都存储关键字列和非关键列。对应的主键索引也叫聚集索引,其他列的索引叫secondary index,也叫做二级索引。二级索引的每条记录都包含该行的主键值,InnoDB使用这个主键值来搜索聚集索引中的行。因此,较短的主键值是有利的,可以缩小二级索引的空间。

优势:

  • 主键快速随机访问,因为仅扫描索引就足够了(数据存在聚集索引中)。由于没有单独的表存储区,对表数据的更改(insert,update,delete)只更新索引就足够了。
  • 如果基于主键的范围查询访问,速度很快,因为数据是聚集在一起的。
  • 需要的存储空间更小,避免的主键的重复存储。而在堆表(heap-organized tables)中主键是存储两次的。

聚集索引 clustered index

以innodb引擎举例,每个表都有一个聚集索引,其中存储行的数据。通常来讲,聚集索引与主键是一个意思。但也有特殊情况。

  • 如果你没有为表定义一个primary key(意味着数据库就不知以何种形式存储数据),那么innodb将会定义第一个unique索引且其中的键列都是非null为聚集索引。
  • 如果该表没有primary key或何止的unique索引,则innodb会使用一个隐藏的GEN_CLUST_INDEX(包含行ID:行ID是一个6字节的字段,随着新行的插入而单调递增。)做为聚簇索引。

聚集索引的优势在于,访问行的速度更快。因为索引中就存储数据信息。比起二级索引,都必须从根节点通过分支节点导航到正确的叶节点,以获得主键值,然后对主键索引执行随机IO读取(再次从根节点通过分支节点到正确的叶节点)来获取数据行。其实为了解决这个问题,也有covering index 这个概念,简单讲就是数据在存在于索引当中,不需要去访问表。

相关文章
|
Kubernetes 安全 Cloud Native
云原生|kubernetes|pod或容器的安全上下文配置解析
云原生|kubernetes|pod或容器的安全上下文配置解析
1135 0
|
数据可视化 Docker Python
【保姆级】Python项目(Flask网页)部署到Docker的完整过程
相信看到这篇文章的读者应该已经学会了Docker的安装以及Docker的基本使用,如果还不会的可以参考我之前的文章进行详细学习!
1715 0
|
缓存 达摩院 Kubernetes
数据缓存系列分享(六):通义千问Qwen-14B大模型快速体验
阿里达摩院近期对通义千问大模型 Qwen-14B 进行了开源(之前开源的是Qwen-7B模型),目前在ModelScope和HuggingFace上均可直接下载。关于Qwen-7B的搭建可以参考我们之前的文章:数据缓存系列分享(五):开源大语言模型通义千问快速体验版,本文将使用一样的方式打开Qwen-14B,快速体验一下。
2817 0
数据缓存系列分享(六):通义千问Qwen-14B大模型快速体验
|
存储 分布式计算 Hadoop
Hadoop【基础知识 01】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)
【4月更文挑战第3天】Hadoop【基础知识 01】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)
1123 3
|
9月前
|
存储 缓存 Java
我们来说一说 JVM 的内存模型
我是小假 期待与你的下一次相遇 ~
586 5
|
关系型数据库 Linux 数据库
PostgreSQL源码编译安装
本节详细介绍了如何通过源码编译安装 PostgreSQL 17.6,涵盖从源码下载、依赖安装、配置编译参数、执行编译与安装、创建数据库用户与目录、初始化数据库,到配置 systemd 启动服务的完整流程。内容适用于多种 Linux 发行版,如 Rocky Linux、CentOS、openEuler、Ubuntu、Debian 等,并提供了常见错误的解决方法及一键安装脚本,帮助用户高效完成 PostgreSQL 的源码部署。
1648 0
PostgreSQL源码编译安装
|
NoSQL 算法 Java
Java Redis多限流
通过本文的介绍,我们详细讲解了如何在Java中使用Redis实现三种不同的限流策略:固定窗口限流、滑动窗口限流和令牌桶算法。每种限流策略都有其适用的场景和特点,根据具体需求选择合适的限流策略可以有效保护系统资源和提高服务的稳定性。
654 18
|
Java 数据安全/隐私保护 流计算
10分钟了解Flink Watermark水印
在上一篇中,介绍了Flink里时间的概念和窗口计算,在实际生产过程中,由于网络等原因,许多数据会延迟到达窗口,这种情况Flink如何处理?Watermark登场,本文从这几点进行介绍:水印的概念、水印如何计算、允许延迟和侧道输出、水印生成策略、案例及代码。
10分钟了解Flink Watermark水印
|
存储 监控 安全
|
SQL 存储 关系型数据库
关系型数据库SQLserver添加新列
【8月更文挑战第4天】
748 9