分区表的查询性能跟 SQL 中条件有关。当 SQL 中带上拆分键时,OceanBase 会根据条件做分区裁剪,只用搜索特定的分区即可;如果没有拆分键,则要扫描所有分区。
背景信息
分区表也可以通过创建索引来提升性能。跟分区表一样,分区表的索引也可以分区或者不分区。
如果分区表的索引不分区,就是一个全局索引(GLOBAL),是一个独立的分区,索引数据覆盖整个分区表。
如果分区表的索引分区了,根据分区策略又可以分为两类。一是跟分区表保持一致的分区策略,则每个索引分区的索引数据覆盖相应的分区表的分区,这个索引又叫本地索引(LOCAL)。 二是作为 GLOBAL 索引可以有自己独立的分区方式。
建议尽可能的使用本地索引,只有在有必要的时候才使用全局索引。其原因是全局索引会降低 DML 的性能,DML 可能会因此产生分布式事务。
通常创建索引时默认都是本地索引,全局索引需要在后面增加关键字 GLOBAL。
语法
CREATE [UNIQUE] INDEX index_name
ON table_name (index_col_name,...)
[index_type] [index_options]
[partition_option]
index_type:
USING BTREE
index_options:
index_option [index_option...]
index_option:
GLOBAL | LOCAL
| COMMENT 'string'
| COMPRESSION [=] {NONE | LZ4_1.0 | LZO_1.0 | SNAPPY_1.0 | ZLIB_1.0}
| BLOCK_SIZE [=] size
| STORING(column_name_list)
| VISIBLE | INVISIBLE
index_col_name:
column_name [(length)] [ASC | DESC]
column_name_list:
column_name [, column_name...]
参数解释
| 参数 | 描述 |
|---|---|
| index_name | 指定要创建的索引名称。 |
| table_name | 指定索引所属的表名。 |
| index_col_name | 指定索引的列名,每个列名后都支持 ASC(升序),不支持 DESC(降序)。默认为升序。 建立索引的排序方式为:首先以 index_col_name 中第一个列的值排序;该列值相同的记录,按下一列名的值排序;以此类推。 |
| column_name | 用于创建索引的列名。 |
| length | 对于字符串列,可以使用 col_name(length) 语法截取字符串的部分用于创建索引。支持的数据类型有 CHAR、VARCHAR、BINARY 与 VARBINARY。 |
| index_type | 索引类型,只支持 USING BTREE,表示使用 B-Tree 索引。 |
| UNIQUE | 指定为唯一索引。 |
| index_option | 指定索引选项,多个 index_option 以空格分隔。 |
| GLOBAL | LOCAL | 指定该索引是全局索引或局部索引,默认是 LOCAL。 |
| COMMENT | 指定注释。 |
| COMPRESSION | 指定压缩算法。 |
| BLOCK_SIZE | 指定微块大小。 |
| STORING | 表示索引表中冗余存储某些列,以提高系统查询性能。 |
示例
创建分区表的本地索引。
创建
t_log_part_by_range_hash表。CREATE TABLE t_log_part_by_range_hash (log_date int primary key) ;创建分区表的本地索引
idx_log_date。CREATE INDEX idx_log_date ON t_log_part_by_range_hash(log_date);查看已创建的分区索引
idx_log_date。obclient> SHOW INDEX FROM t_log_part_by_range_hash; +--------------------------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+-----------+---------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | +--------------------------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+-----------+---------------+---------+ | t_log_part_by_range_hash | 0 | PRIMARY | 1 | log_date | A | NULL | NULL | NULL | | BTREE | available | | YES | | t_log_part_by_range_hash | 1 | idx_log_date | 1 | log_date | A | NULL | NULL | NULL | | BTREE | available | | YES | +--------------------------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+-----------+---------------+---------+ 2 rows in set
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




