索引组织表

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

目前的表存储方式主要分为两种:索引组织表( 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或容器的安全上下文配置解析
1089 0
|
JSON 前端开发 JavaScript
3分钟让你学会axios在vue项目中的基本用法(建议收藏)
3分钟让你学会axios在vue项目中的基本用法(建议收藏)
902 0
|
缓存 达摩院 Kubernetes
数据缓存系列分享(六):通义千问Qwen-14B大模型快速体验
阿里达摩院近期对通义千问大模型 Qwen-14B 进行了开源(之前开源的是Qwen-7B模型),目前在ModelScope和HuggingFace上均可直接下载。关于Qwen-7B的搭建可以参考我们之前的文章:数据缓存系列分享(五):开源大语言模型通义千问快速体验版,本文将使用一样的方式打开Qwen-14B,快速体验一下。
2767 0
数据缓存系列分享(六):通义千问Qwen-14B大模型快速体验
|
数据可视化 Docker Python
【保姆级】Python项目(Flask网页)部署到Docker的完整过程
相信看到这篇文章的读者应该已经学会了Docker的安装以及Docker的基本使用,如果还不会的可以参考我之前的文章进行详细学习!
1684 0
|
5月前
|
Linux
libunwind-1.3.1-3.ky10.x86_64.rpm 安装步骤详解(Kylin V10版)
本文介绍如何在Linux系统中手动安装libunwind RPM包。首先下载指定版本的rpm文件,通过终端进入存放目录,使用sudo rpm命令进行安装,检查是否成功并验证其可用性,确保依赖正确解决,适用于需要该库支持的应用运行。
|
关系型数据库 Linux 数据库
PostgreSQL源码编译安装
本节详细介绍了如何通过源码编译安装 PostgreSQL 17.6,涵盖从源码下载、依赖安装、配置编译参数、执行编译与安装、创建数据库用户与目录、初始化数据库,到配置 systemd 启动服务的完整流程。内容适用于多种 Linux 发行版,如 Rocky Linux、CentOS、openEuler、Ubuntu、Debian 等,并提供了常见错误的解决方法及一键安装脚本,帮助用户高效完成 PostgreSQL 的源码部署。
1479 0
PostgreSQL源码编译安装
阿里云服务器带宽价格参考:选择1M、3M、5M、10M宽带价格解析
阿里云服务器1M、3M、5M、10M宽带需要多少钱?单说阿里云服务器宽带多少钱,而不确定云服务器实例规格及cpu和内存配置的话,是没办法具体说多少钱的,因为云服务器的价格受很多因素影响。本文将详细解析阿里云服务器在选择1M、3M、5M、10M不同带宽下的价格差异,以供大家参考。
阿里云服务器带宽价格参考:选择1M、3M、5M、10M宽带价格解析
|
存储 监控 安全
|
机器学习/深度学习 数据处理 Python
机器学习实战:房价预测项目
【7月更文挑战第13天】本文详细介绍了基于机器学习的房价预测项目的实战过程。从数据准备、特征工程、模型构建到结果评估,每一步都至关重要。通过合理的特征选择和模型优化,我们可以构建出性能优异的房价预测模型,为房地产行业的决策提供有力支持。未来,随着机器学习技术的不断发展和应用场景的不断拓展,房价预测模型将更加智能化和精准化。
1255 7
|
SQL 存储 关系型数据库
关系型数据库SQLserver添加新列
【8月更文挑战第4天】
673 9