主索引和二级索引到底有啥区别? [复制]

Posted

技术标签:

【中文标题】主索引和二级索引到底有啥区别? [复制]【英文标题】:What is difference between primary index and secondary index exactly? [duplicate]主索引和二级索引到底有什么区别? [复制] 【发布时间】:2014-01-16 11:05:06 【问题描述】:

谁能告诉我主索引和二级索引之间的确切区别是什么? 一级和二级索引类别下有哪些不同的索引? 与二级索引相比,使用主索引有什么优势,反之亦然?

【问题讨论】:

你的意思是主键和外键吗? @juergend,不是主键和外键,只是索引。 Oracle 中没有主索引或二级索引之类的东西。您是否将其与唯一和非唯一索引混淆了? 另见这篇文章***.com/questions/20824686/… 这不是一个重复的问题。在讨论在 INNODB 数据库上生成的计算列时,mysql 会混淆对主索引和二级索引的引用。 【参考方案1】:

主索引:

主索引是一组字段的索引,包括 该字段的唯一主键,并保证不包含重复项。 也称为聚集索引。 例如。员工 ID 可以是它的示例。

二级索引:

二级索引是非主索引并且可能有重复的索引。 例如。员工姓名就是一个例子。因为员工姓名可以有相似的值。

主索引包含表的关键字段。激活表时,会在数据库中自动创建主索引。如果大表访问频繁,无法应用主索引排序,则应为该表创建二级索引。

表上的索引具有三个字符的索引 ID。 '0' 保留给主索引。客户可以在 SAP 表上创建自己的索引;他们的 ID 必须以 Y 或 Z 开头。

【讨论】:

澄清“如果经常访问大表而无法应用主索引排序,则应为该表创建二级索引。”:如果您经常执行不是基于表的主索引而是基于其他列的查询,然后为了提​​高性能,在该列(或列集)上创建二级索引。例如,考虑一个员工表。您通常希望通过一个人的姓名进行查询,但姓名通常不是主索引,因为它不是唯一的(两个同名的人)。所以在 Name 上建立二级索引。 (我意识到答案谈到了将名称作为二级索引;我的澄清是将我引用的那句话与关于名称作为二级索引的那句话联系起来。) @ToolmakerSteve 从技术上讲,二级索引可以在缺席的情况下工作,还是可以在主索引上工作?即使您没有,我也看到 MySQL 在内部创建了一个。您只能在主索引之上拥有二级索引。 虽然这似乎解释了特定数据库中二级索引的详细信息,但我认为大多数人(如我自己)都是新的数据库用户,并且想知道存在这种区别的根本原因。 imo,写的细节似乎很琐碎。 @dtc - Branko's answer here 是一个很好的解释。简短的总结是数据的物理组织考虑了主索引,与使用二级索引相比,它可以提高性能和内存占用。然而,如果主索引不能帮助优化您经常执行的某些查询,则通常值得创建一个旨在帮助该查询的二级索引。 (阅读有关索引如何以及何时加速查询的任何文章;无论索引是主索引还是辅助索引,都会发生这种加速。)

以上是关于主索引和二级索引到底有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

跨主索引和全局二级索引的 DynamoDB 键唯一性

PolarDB-X 全局二级索引

PolarDB-X 全局二级索引

DynamoDB 中本地索引和全局索引的区别

文件目录结构有哪几种,各有啥优缺点?

如何使用 DynamoDB 建模双键/二级索引约束?