I am experimenting phoenix and see how secondary index is used. I found out 
that global secondary index was not guaranteed to be used even if hint is used. 
 I wondered if I missed any steps.

I used hbase version 2.2.7 with phoenix 5.1.3 (the client and server jar used 
are phoenix-client-embedded-hbase-2.2-5.1.3.jar and 
phoenix-server-hbase-2.2-5.1.3.jar
). Based on https://issues.apache.org/jira/browse/PHOENIX-6458, the hint should 
force index to be used even if the column is not a covered column, but it did 
not.


here is how table and its index were created, and the plan showed full table 
scan:

        CREATE TABLE IF NOT EXISTS  DATATABLE_CF0_NATURE_CEB2 (rowkey VARCHAR 
PRIMARY KEY, C1 VARCHAR, C2 VARCHAR );

        create index DATATABLE_CF0_NATURE_CEB2_IDX1 on 
DATATABLE_CF0_NATURE_CEB2 (C1);

     Plan is also Full scan:
       explain select /*+ INDEX ( DATATABLE_CF0_NATURE_CEB2  
DATATABLE_CF0_NATURE_CEB2_IDX1 ) */ c2 from DATATABLE_CF0_NATURE_CEB2 where 
c1='me';
       
+------------------------------------------------------------------------------------+----------------+---------------+-------------+
       |                                        PLAN                            
            | EST_BYTES_READ | EST_ROWS_READ | EST_INFO_TS |
       
+------------------------------------------------------------------------------------+----------------+---------------+-------------+
       | CLIENT 1-CHUNK PARALLEL 1-WAY ROUND ROBIN FULL SCAN OVER 
DATATABLE_CF0_NATURE_CEB2 | null           | null          | null        |
       |     SERVER FILTER BY C1 = 'me'                                         
            | null           | null          | null        |
       
+------------------------------------------------------------------------------------+----------------+---------------+-------------+


In another table created using the same way , the plan did show the secondary 
index was used:

CREATE TABLE pure_phoenix_poc_table ( id INTEGER not null primary key desc, 
name VARCHAR (30), date DATE ,  m.db_utilization DECIMAL, i.db_utilization 
DECIMAL ) m.DATA_BLOCK_ENCODING='DIFF';

create index PURE_PHOENIX_POC_TABLE_IDX_NAME on PURE_PHOENIX_POC_TABLE (name);

explain select /*+ INDEX(PURE_PHOENIX_POC_TABLE 
PURE_PHOENIX_POC_TABLE_IDX_NAME) */ i.DB_UTILIZATION from 
PURE_PHOENIX_POC_TABLE where name = '111';
+---------------------------------------------------------------------------------------------------+----------------+---------------+-------------+
|                                               PLAN                            
                    | EST_BYTES_READ | EST_ROWS_READ | EST_INFO_TS |
+---------------------------------------------------------------------------------------------------+----------------+---------------+-------------+
| CLIENT 1-CHUNK PARALLEL 1-WAY ROUND ROBIN RANGE SCAN OVER 
PURE_PHOENIX_POC_TABLE_IDX_NAME ['111'] | null           | null          | null 
       |
|     SERVER MERGE [I.DB_UTILIZATION]                                           
                    | null           | null          | null        |
|     SERVER FILTER BY FIRST KEY ONLY                                           
                    | null           | null          | null        |
+---------------------------------------------------------------------------------------------------+----------------+---------------+-------------+

Any help is appreciated. Thanks


Reply via email to