分区表的查询性能跟 SQL 中条件有关。当 SQL 中带上拆分键时,OceanBase 会根据条件做分区剪枝,只用搜索特定的分区即可;如果没有拆分键,则要扫描所有分区。

    分区表也可以通过创建索引来提升性能。跟分区表一样,分区表的索引也可以分区或者不分区。

    • 如果分区表的索引不分区,就是一个全局索引(GLOBAL),是一个独立的分区,索引数据覆盖整个分区表。
    • 如果分区表的索引分区了,根据分区策略又可以分为两类。一是跟分区表保持一致的分区策略,则每个索引分区的索引数据覆盖相应的分区表的分区,这个索引又叫本地索引(LOCAL)。

    建议尽可能的使用本地索引,只有在有必要的时候才使用全局索引。其原因是全局索引会降低 DML 的性能,DML 可能会因此产生分布式事务。

    通常创建索引时默认都是全局索引,本地索引需要在后面增加关键字 LOCAL 。

    示例:创建分区表的本地索引。

    1. CREATE INDEX idx_log_date ON t_log_part_by_range_hash(log_date) LOCAL;