索引组织表

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

目前的表存储方式主要分为两种:索引组织表( 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或容器的安全上下文配置解析
871 0
|
缓存 JavaScript 前端开发
【axios】二次封装——避免重复发送请求
【axios】二次封装——避免重复发送请求
850 0
【axios】二次封装——避免重复发送请求
|
缓存 达摩院 Kubernetes
数据缓存系列分享(六):通义千问Qwen-14B大模型快速体验
阿里达摩院近期对通义千问大模型 Qwen-14B 进行了开源(之前开源的是Qwen-7B模型),目前在ModelScope和HuggingFace上均可直接下载。关于Qwen-7B的搭建可以参考我们之前的文章:数据缓存系列分享(五):开源大语言模型通义千问快速体验版,本文将使用一样的方式打开Qwen-14B,快速体验一下。
2456 0
数据缓存系列分享(六):通义千问Qwen-14B大模型快速体验
|
数据可视化 Docker Python
【保姆级】Python项目(Flask网页)部署到Docker的完整过程
相信看到这篇文章的读者应该已经学会了Docker的安装以及Docker的基本使用,如果还不会的可以参考我之前的文章进行详细学习!
1540 0
|
关系型数据库 MySQL 分布式数据库
PolarDB 与传统数据库的性能对比分析
【8月更文第27天】随着云计算技术的发展,越来越多的企业开始将数据管理和存储迁移到云端。阿里云的 PolarDB 作为一款兼容 MySQL 和 PostgreSQL 的关系型数据库服务,提供了高性能、高可用和弹性伸缩的能力。本文将从不同角度对比 PolarDB 与本地部署的传统数据库(如 MySQL、PostgreSQL)在性能上的差异。
985 1
|
人工智能 小程序 UED
【一步步开发AI运动小程序】十六、AI运动识别中,如何判断人体站位?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,本地引擎无需后台支持,具备快速、体验好、易集成等优势。本文介绍如何利用插件的`camera-view`功能,通过检测人体站位视角(前、后、左、右),确保运动时的最佳识别率和用户体验。代码示例展示了如何实现视角检查,确保用户正或背对摄像头,为后续运动检测打下基础。
|
Oracle Java 关系型数据库
聊聊 datax 的 OceanBase 数据同步插件 ||批处理参数 rewriteBatchedStatements=true&useCursorFetch=true
聊聊 datax 的 OceanBase 数据同步插件 分析下批处理参数 rewriteBatchedStatements=true&useCursorFetch=true 对大规模数据读写的性能影响
聊聊 datax 的 OceanBase 数据同步插件 ||批处理参数 rewriteBatchedStatements=true&useCursorFetch=true
|
机器学习/深度学习 数据处理 Python
机器学习实战:房价预测项目
【7月更文挑战第13天】本文详细介绍了基于机器学习的房价预测项目的实战过程。从数据准备、特征工程、模型构建到结果评估,每一步都至关重要。通过合理的特征选择和模型优化,我们可以构建出性能优异的房价预测模型,为房地产行业的决策提供有力支持。未来,随着机器学习技术的不断发展和应用场景的不断拓展,房价预测模型将更加智能化和精准化。
|
安全 数据库 数据安全/隐私保护
撞库攻击是什么?如何有效阻止撞库攻击?
通过采取这些防护措施,可以有效降低撞库攻击的成功几率,保护用户的账户和数据安全。
790 0
撞库攻击是什么?如何有效阻止撞库攻击?
uniapp使用字体图标
uniapp使用字体图标
347 1