• 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' 





     


  • 相关阅读:
    Java: 数据类型
    数据结构是什么
    数据结构:进制转换
    数据结构:堆与栈
    class的写法
    Java:异常体系
    数据结构: 先进后出——堆栈
    tomcat:web容器
    Windows: Dos命令
    面向函数范式编程
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276357.html
Copyright © 2020-2023  润新知