
以上是在V4.6.0版本MySQL租户下的实验。
请教大家:
1 为什么案例一,创建的索引是全局索引,因为is_global_index=true。
2 为什么案例二,创建的索引不是全局索引,因为is_global_index=false。
3 另外, create index i2 on t2(c2) 和 create index i2 on t2(c2) GLOBAL, 创建的都是全局索引 ?

以上是在V4.6.0版本MySQL租户下的实验。
请教大家:
1 为什么案例一,创建的索引是全局索引,因为is_global_index=true。
2 为什么案例二,创建的索引不是全局索引,因为is_global_index=false。
3 另外, create index i2 on t2(c2) 和 create index i2 on t2(c2) GLOBAL, 创建的都是全局索引 ?
根据您提供的信息,您提到的两个案例中创建了不同的索引,并且通过 explain 语句查看了这些索引在查询计划中的表现。以下是针对您的三个问题的详细解答:
t2 被定义为一个分区表,使用 PARTITION BY HASH(c1) PARTITIONS 4; 进行了分区。GLOBAL 关键字:create index i2 on t2(c2) GLOBAL;
GLOBAL 将使索引成为一个全局索引。这意味着索引将跨越所有分区,并且在查询时能够提供更高效的访问路径。因此,当您在分区表上创建全局索引时,explain 输出显示 is_global_index=true。
t2 没有被定义为分区表,即是一个普通的表。GLOBAL 关键字:create index i2 on t2(c2) GLOBAL;,但因为该表本身不是分区表,所以这里的 GLOBAL 关键字实际上没有意义。GLOBAL,也不会改变其本质。因此,对于非分区表,即使尝试创建全局索引,explain 输出仍会显示 is_global_index=false。
create index i2 on t2(c2) 和 create index i2 on t2(c2) GLOBAL,创建的都是全局索引吗?create index i2 on t2(c2) GLOBAL; 会创建一个全局索引 (is_global_index=true)。GLOBAL,则默认情况下创建的是局部索引 (is_global_index=false)。GLOBAL,最终创建的都将是局部索引 (is_global_index=false)。总结来说,GLOBAL 关键字只有在分区表上创建索引时才真正起到作用,表示这是一个全局索引。而对于非分区表,它不会影响索引类型,结果依然是局部索引。
希望以上解释能帮助您理解不同情况下索引类型的差异。如果您还有其他疑问,请随时提问!
详情请参考:
论坛小助手的回答很完美,学习了。
建表不一样,一个是分区表,一个是普通表。
对于index问题,除了文中提到的方法,还可以考虑GLOBAL和is的结合使用。
学会了呀
业务需要啥索引就建啥索引
t1表是一个普通表,给它创建了一个分区索引,这个分区索引有p0、p1、p2这三个分区,那么这个分区索引的三个分区p0、p1、p2,是和主表数据绑定在一起的吗?他们是被存储在同一个observer节点里吗? @论坛小助手 解答下
根据您提出的问题,我们需要明确几个关键点来回答您的疑问。首先,OceanBase 的局部索引(也称为分区索引)与主表数据的关系以及它们在存储节点上的分布情况。基于文档片段中的信息,可以得出以下结论:
局部索引的数据绑定:
局部索引的存储位置:
综上所述,对于普通表 t1 创建的局部索引,其各个分区 p0、p1、p2 是和主表数据绑定在一起的,并且它们会被存储在同一个 OBServer 节点中。这种设计旨在提高查询效率,尤其是在处理大数据量时,避免了跨节点访问索引数据所带来的额外开销。但请注意,在某些特定情况下(例如集群内重新平衡或手动调整),可能会出现局部索引分区与主表分区不在同一物理节点的情况。不过,这种情况并不常见,并且通常需要人工干预才会发生。
希望以上解释能帮助解答您的疑问。如果还有其他问题,请随时告知!
详情请参考:
您好!根据您的问题,我将详细解答关于局部索引(分区索引)在 OceanBase 中的存储和分布情况。
您提到 t1 表是一个普通表,并且为其创建了一个分区索引,该索引有 p0、p1、p2 这三个分区。您想了解这些分区索引是否与主表数据绑定在一起,以及它们是否存储在同一个 OBServer 节点中。
p0、p1、p2)与主表的相应分区数据是绑定在一起的。这意味着每个局部索引分区只包含对应表分区的数据。p0 分区数据存储在某个 OBServer 节点上,那么 p0 分区的局部索引数据也会存储在同一个 OBServer 节点上。同样的逻辑适用于 p1 和 p2 分区。p0、p1、p2 与主表的相应分区数据是绑定在一起的。希望以上解释能帮助您理解局部索引在 OceanBase 中的存储和分布情况。如果您还有其他问题,请随时提问!
t1表是一个普通表,给它创建了一个全局分区索引,这个全局分区索引有p0、p1、p2这三个分区,那么这个全局分区索引的三个分区p0、p1、p2,是和主表数据绑定在一起的吗?他们是被存储在同一个observer节点里吗? @论坛小助手
您好!根据您的问题,您提到 t1 表是一个普通表,并且为其创建了一个全局分区索引,该索引有 p0、p1、p2 这三个分区。您想了解这些全局分区索引的分区是否与主表数据绑定在一起,以及它们是否存储在同一个 OBServer 节点中。
全局分区索引的数据绑定
存储位置
TABLE SCAN 算子执行全局索引表扫描时就会包含一次 RPC 操作到远端机器上去获取主表数据。文档依据
片段5:集群管理 FAQ → 存储 FAQ → 在 OceanBase 数据库中,局部索引与全局索引在实现上的区别是什么?
片段6:OceanBase 数据库性能的影响因素 → 资源分配 → 局部索引和全局索引 → 全局索引
希望以上解释能帮助您理解全局分区索引在 OceanBase 中的存储和分布情况。如果您还有其他问题,请随时提问!
详情请参考:
又学到了,非分区表默认都是局部索引,指定Global也不行,难道非分区表不能是全局索引么