什么是全局索引和本地索引

全局索引和本地索引通常在讨论分区表时被提及,尤其是在数据库如Oracle中。这些索引策略是为分区表提供高效查询的方式。

  1. 全局索引 (Global Index):
    • 一个全局索引会跨越所有的分区。这意味着,即使表被分为多个分区,全局索引仍然作为一个整体存在。
    • 当你在全局索引上查询时,数据库可能需要检查所有的分区,这可能会增加查询时间。
    • 当对分区进行操作(如添加、删除、拆分分区)时,可能需要对全局索引进行维护,这可能会导致额外的开销。
    • 全局索引特别适合那些不常变动其分区结构的大表。
  2. 本地索引 (Local Index):
    • 对于分区表中的每一个分区,都有一个与之关联的索引分区。这意味着,如果你有一个分为10个分区的表,你实际上会有10个索引分区,每一个分区都有自己的索引。
    • 当你在本地索引上查询时,数据库只需要检查与查询相关的分区,这通常会更快。
    • 当对分区进行操作时,只需要维护与那个分区相关的索引,不会影响其他分区的索引。这通常会降低维护成本。
    • 本地索引特别适合那些经常变动其分区结构或有大量独立操作在各个分区上的表。

选择全局索引还是本地索引主要取决于应用的需求、查询的类型以及维护的成本。在某些情况下,可能会在同一个分区表上同时使用全局和本地索引。

MySQL分区支持全局索引还是本地索引?

截止我最后的知识更新日期(2021年9月),MySQL的分区表只支持本地索引(Local Indexes)。这意味着,每个分区维护自己的索引,而不是跨所有分区的单一索引。每个分区的索引仅对该分区内的数据进行索引。

当进行查询或其他操作时,MySQL可以直接定位到包含相关数据的分区,然后在该分区的本地索引上进行查找。这可以大大提高查询速度,尤其是在大量数据中。

然而,MySQL不支持全局索引。所以,设计和管理MySQL的分区表时,需要考虑这一点。