索引是创建在表上的,对数据库表中一列或多列的值进行排序的一种结构。其作用主要在于提高查询的速度,降低数据库系统的性能开销。
OceanBase中,新创建的索引需要等待一次每日合并后,才生效。
格式
CREATE [UNIQUE] INDEX indexname
ON tblname (index_col_name,…)
[index_type][index_options];
index_type:
USING BTREE
index_options:
index_option [index_option…]
index_option:
GLOBAL [LOCAL]
| COMMENT 'string'
| COMPRESSION [=] '{NONE | LZ4_1.0 | LZO_1.0 | SNAPPY1.0 | ZLIB_1.0}'
| BLOCK_SIZE [=] size
| STORING(columname_list)
| index_using_algorithm
columname_list:
colname [, colname…]
index_col_name:
colname [ASC | DESC]
说明: OceanBase内部数据以b树为索引。
Oceanbase>CREATE TABLE test (c1 int primary key, c2 varchar(10));
Query OK, 0 rows affected (0.10 sec)
Oceanbase>create index test_index on test(c1, c2 desc) using hash;
Query OK, 0 rows affected (0.04 sec)
Oceanbase>show index from test;
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+-------------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+-------------+---------------+
| test | 0 | PRIMARY | 1 | c1 | A | NULL | NULL | NULL | | BTREE | available | |
| test | 1 | test_index | 1 | c1 | A | NULL | NULL | NULL | | BTREE | unavailable | |
| test | 1 | test_index | 2 | c2 | A | NULL | NULL | NULL | YES | BTREE | unavailable | |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+-------------+---------------+
3 rows in set (0.00 sec)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在OceanBase数据库中,创建索引的过程和语法与您提供的信息基本一致。这里有几个关键点需要注意:
索引类型:虽然您的示例中使用了USING HASH
,但根据OceanBase的官方文档,其内部主要采用B树作为索引结构,因此更常见的应该是使用USING BTREE
。如果您的示例是为了说明其他数据库系统中的多样性,请忽略此条注释。
索引生效时间:您提到新创建的索引需要等待一次每日合并后才生效。这实际上是旧的信息。在最新的OceanBase版本中,索引创建后通常很快就可以被查询优化器所用,无需等待特定的合并周期。不过,索引的全局可见性和数据的一致性可能仍需依赖于事务的提交和系统的一些后台处理过程。
索引选项:
GLOBAL
和 LOCAL
:对于分区表,使用LOCAL
关键字创建的索引将每个分区的索引独立存储,这可以减少索引的大小并提高维护效率。默认情况下,如果不指定,创建在分区表上的索引会是GLOBAL
,意味着索引跨越所有分区。STORING
:允许在索引中直接存储额外列的数据,这样在某些查询场景下可以直接从索引中获取所需数据而无需回表,从而提升查询性能。查看索引:通过SHOW INDEX FROM tblname;
命令可以查看表上已创建的所有索引及其属性,包括是否唯一、索引名、列顺序、列名、排序方式等。
索引状态:在您的示例输出中,test_index
的Comment字段显示为unavailable
,这可能表示索引创建后尚未完全就绪或因某种原因不可用。在实际操作中,索引创建后应尽快变为available
状态以供查询优化器使用。
注意事项:创建索引时应考虑索引对写入性能的影响,因为索引维护会增加插入、更新和删除操作的成本。同时,合理选择索引列和索引类型,以及适时地分析和优化索引,对于保持数据库的良好性能至关重要。
如果您有具体关于如何在OceanBase中高效管理索引、监控索引状态或优化查询性能的问题,欢迎继续提问。