Global 和 Local 索引。

1、创建表:

create table immutable_local (id varchar not null primary key, cf1.a varchar, cf1.b varchar, cf2.c varchar, cf2.d varchar ) immutable_rows=true;

create table immutable_global (id varchar not null primary key, cf1.a varchar, cf1.b varchar, cf2.c varchar, cf2.d varchar ) immutable_rows=true;

create table mutable_local (id varchar not null primary key, cf1.a varchar, cf1.b varchar, cf2.c varchar, cf2.d varchar ) immutable_rows=false;

create table mutable_global (id varchar not null primary key, cf1.a varchar, cf1.b varchar, cf2.c varchar, cf2.d varchar ) immutable_rows=false;


2、创建索引:

create  index index_mutable_global on mutable_global(a,c) include(b);    成功

create local index index_mutable_local on mutable_local(a,c) include(b);  成功

create  index index_immutable_global on immutable_global(a,c) include(b);  成功


create local index index_immutable_local on immutable_local(a,c) include(b);  失败,immutable 表无法创建Local .
Error: ERROR 1048 (43A04): Local indexes aren't allowed on tables with immutable rows. tableName=INDEX_IMMUTABLE_LOCAL (state=43A04,code=1048)


3.插入数据


upsert into mutable_global values ('100001','a1','b1','c1','d1');

upsert into mutable_global values ('100002','a2','b2','c2','d2');


upsert into mutable_local values ('100001','a1','b1','c1','d1');

upsert into mutable_local values ('100002','a2','b2','c2','d2');


upsert into immutable_global values ('100001','a1','b1','c1','d1');

upsert into immutable_global values ('100002','a2','b2','c2','d2');


4、测试检索

检索中包含了列d,  此列不包含在索引中。

a、immutable 表使用的时全表扫描,没有使用索引

explain select a,b,c,d from immutable_global where a='a1';

 CLIENT PARALLEL 1-WAY FULL SCAN OVER IMMUTABLE_GLOBAL 
      SERVER FILTER BY CF1.A = 'a1' 

 

b、mutable 表使用的时全表扫描,没有使用Global索引

explain select a,b,c,d from mutable_global where a='a1';
    CLIENT PARALLEL 1-WAY FULL SCAN OVER MUTABLE_GLOBAL  
           SERVER FILTER BY CF1.A = 'a1'


c、mutable 表使用了 LOCAL 索引

explain select a,b,c,d from mutable_local where a='a1';
 
  CLIENT PARALLEL 1-WAY RANGE SCAN OVER _LOCAL_IDX_MUTABLE_LOCAL [-32768,'a1'] |
         CLIENT MERGE SORT


5、Local 索引细节

索引定义create local index index_mutable_local on mutable_local(a,c) include(b);   


索引内容:


a、使用部分索引:索引组合的第一个

explain select a,b,c,d from mutable_local where a='a1' ;

CLIENT PARALLEL 1-WAY RANGE SCAN OVER _LOCAL_IDX_MUTABLE_LOCAL [-32768,'a1']  
     CLIENT MERGE SORT


b、使用部分索引:索引组合的第二个

explain select a,b,c,d from mutable_local where c='c1' ;

CLIENT PARALLEL 1-WAY RANGE SCAN OVER _LOCAL_IDX_MUTABLE_LOCAL [-32768] 
     SERVER FILTER BY C = 'c1' 
 CLIENT MERGE SORT 


c、使用部分索引:include的部分

explain select a,b,c,d from mutable_local where b='b1' ;
 CLIENT PARALLEL 1-WAY RANGE SCAN OVER _LOCAL_IDX_MUTABLE_LOCAL [-32768] 
      SERVER FILTER BY CF1.B = 'b1'  
 CLIENT MERGE SORT


d、使用全部索引

explain select a,b,c,d from mutable_local where a='a1' and c='c1' ; 
  CLIENT PARALLEL 1-WAY RANGE SCAN OVER _LOCAL_IDX_MUTABLE_LOCAL [-32768,'a1','c1']  
  CLIENT MERGE SORT 


调换a和c的位置,phoenix会自动优化。

explain select a,b,c,d from mutable_local where c='c1' and a='a1' ; 
  CLIENT PARALLEL 1-WAY RANGE SCAN OVER _LOCAL_IDX_MUTABLE_LOCAL [-32768,'a1','c1'] 
 CLIENT MERGE SORT


e、使用索引中全部字段

explain select a,b,c,d from mutable_local where c='c1' and b='b1' and a='a1' ;
 CLIENT PARALLEL 1-WAY RANGE SCAN OVER _LOCAL_IDX_MUTABLE_LOCAL [-32768,'a1','c1'] 
     SERVER FILTER BY CF1.B = 'b1' 
 CLIENT MERGE SORT  


f、使用了不存在于索引中的字段。

explain select a,b,c,d from mutable_local where a='a1' and d='d1'; 

 CLIENT PARALLEL 1-WAY FULL SCAN OVER MUTABLE_LOCAL  
      SERVER FILTER BY (CF1.A = 'a1' AND CF2.D = 'd1') 


g. 在Select  中不要使用*,*会导致全表扫描

 explain select a,b,c,d from MUTABLE_LOCAL where a='a'; 
 CLIENT PARALLEL 1-WAY RANGE SCAN OVER _LOCAL_IDX_MUTABLE_LOCAL [-32768,'a'] 
          CLIENT MERGE SORT

explain select * from MUTABLE_LOCAL where a='a';
 CLIENT PARALLEL 1-WAY FULL SCAN OVER MUTABLE_LOCAL 
    SERVER FILTER BY CF1.A = 'a' 





 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值