暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase8a如何建立hash索引及查看查询语句是否使用hash索引

VV_刺头王 2022-03-14
2160

一、对表建立索引和删除索引:
建立索引:
CREATE INDEX语法格式:

CREATE INDEX index_name ON [vc_name.][database_name.]table_name(co 
lumn_name) [key_block_size = size_value] [key_dc_size=num] USING H 
ASH GLOBAL; 

举例:
示例 1:创建默认哈希索引。

gbase> CREATE TABLE t1(a int,b varchar(10)); 
Query OK, 0 rows affected 
gbase> CREATE INDEX idx1 on t1(a) ; 
Query OK, 0 rows affected
Records: 0 Duplicates: 0 Warnings: 0
gbase> SHOW CREATE TABLE t1\G 
*************************** 1. row ***************************
 Table: t1
Create Table: CREATE TABLE "t1" (
 "a" int(11) DEFAULT NULL,
 "b" varchar(10) DEFAULT NULL,
 KEY "idx1" ("a") USING HASH GLOBAL
) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace'
1 row in set (Elapsed: 00:00:00.00)

示例 2:创建 GLOBAL 哈希索引,设置 key_dc_size 值为 1000;

gbase> CREATE TABLE t (a INT); 
Query OK, 0 rows affected
gbase> CREATE INDEX idx_t_a ON t(a) key_DC_size = 1000 USING HASH 
GLOBAL; 
Query OK, 0 rows affected
Records: 0 Duplicates: 0 Warnings: 0
gbase> SHOW CREATE TABLE t\G 
*************************** 1. row ***************************
 Table: t
Create Table: CREATE TABLE "t" (
 "a" int(11) DEFAULT NULL,
 KEY "idx_t_a" ("a") KEY_DC_SIZE=1000 USING HASH GLOBAL
) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace'
1 row in set (Elapsed: 00:00:00.00)

说明:
二进制类型的列不适合使用 HASH INDEX,或者该列数据量较大,但
DISTINCT 值较少时,也不适合使用 HASH INDEX。

  • 同一表上不能创建相同名称的哈希索引,同一表的同一列上能且只
    能创建一个哈希索引,任何 GBase 8a MPP Cluster 支持的数据类
    型的列上都可以创建哈希索引。

  • 创建哈希索引后,基于索引列的等值查询的性能会提高,尤其是表
    中的数据量非常大的情况,在小数据量的情况下,哈希索引对性能
    的提升效果不明显

删除索引:
语法格式:

DROP INDEX
DROP INDEX index_name ON [vc_name.][database_name.]table_name; 

删除索引举例:

gbase> DROP INDEX idx3 ON t1; 
Query OK, 0 rows affected 
Records: 0 Duplicates: 0 Warnings: 0

二、如何查看查询语句中是否用到了hash 索引,可以通过查看查询计划的方式:

create table index5(id int ,name varchar(16),password varchar(16));
CREATE INDEX idx3 on index5(name) key_block_size=16384 USING HASH GLOBAL;

insert into index5(name,password) values(‘cat01’,‘123’);
insert into index5(name,password) values(‘cat02’,‘234’);

explain extended select id from index5 where id=1 order by password;
image.png

查询计划的
May use index: vcname000001.test.index5.id{Smart Index}
这部分内容代表的就是使用了hash索引,一般带有where条件的查询语句会使用hash 索引。

最后修改时间:2022-03-14 17:04:18
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论