Jiping Zhou created PHOENIX-3370: ------------------------------------ Summary: VIEW derived from another VIEW with WHERE on a TABLE doesn't use parent VIEW indexes Key: PHOENIX-3370 URL: https://issues.apache.org/jira/browse/PHOENIX-3370 Project: Phoenix Issue Type: Bug Affects Versions: 4.8.1 Reporter: Jiping Zhou
1. Create a global table CREATE TABLE IF NOT EXISTS PLATFORM_ENTITY.GLOBAL_TABLE ( ORGANIZATION_ID CHAR(15) NOT NULL, KEY_PREFIX CHAR(3) NOT NULL, CREATED_DATE DATE, CREATED_BY CHAR(15), CONSTRAINT PK PRIMARY KEY ( ORGANIZATION_ID, KEY_PREFIX ) ) VERSIONS=1, IMMUTABLE_ROWS=true, MULTI_TENANT=true; 2. Create a global view on base global table with where clause CREATE VIEW IF NOT EXISTS PLATFORM_ENTITY.GLOBAL_VIEW ( INT1 BIGINT NOT NULL, DOUBLE1 DECIMAL(12, 3), IS_BOOLEAN BOOLEAN, TEXT1 VARCHAR, CONSTRAINT PKVIEW PRIMARY KEY ( INT1 ) ) AS SELECT * FROM PLATFORM_ENTITY.GLOBAL_TABLE WHERE KEY_PREFIX = '123'; 3. Create gloabl index on the global view CREATE INDEX IF NOT EXISTS GLOBAL_INDEX ON PLATFORM_ENTITY.GLOBAL_VIEW (TEXT1 DESC, INT1) INCLUDE (CREATED_BY, DOUBLE1, IS_BOOLEAN, CREATED_DATE); 4. Create tenant specific view on top of global view CREATE VIEW IF NOT EXISTS PLATFORM_ENTITY.TENANT_VIEW AS SELECT * FROM PLATFORM_ENTITY.GLOBAL_VIEW; 5. Query in global view EXPLAIN SELECT DOUBLE1 FROM PLATFORM_ENTITY.GLOBAL_VIEW WHERE ORGANIZATION_ID = '00Dxx0000002Col' AND TEXT1='Test' AND INT1=1; The result is CLIENT 1-CHUNK 1 ROWS 452 BYTES PARALLEL 1-WAY ROUND ROBIN POINT LOOKUP ON 1 KEY OVER PLATFORM_ENTITY.GLOBAL_TABLE SERVER FILTER BY TEXT1 = 'Test' It is not using the secondary index at all. The same thing happens on the Tenant view. However if we have a global view without where clause like CREATE VIEW IF NOT EXISTS PLATFORM_ENTITY.GLOBAL_VIEW2 ( INT1 BIGINT NOT NULL, DOUBLE1 DECIMAL(12, 3), IS_BOOLEAN BOOLEAN, TEXT1 VARCHAR, CONSTRAINT PKVIEW PRIMARY KEY ( INT1 ) ) AS SELECT * FROM PLATFORM_ENTITY.GLOBAL_TABLE; CREATE INDEX IF NOT EXISTS GLOBAL_INDEX2 ON PLATFORM_ENTITY.GLOBAL_VIEW2 (TEXT1 DESC, INT1) INCLUDE (CREATED_BY, DOUBLE1, IS_BOOLEAN, CREATED_DATE); EXPLAIN SELECT DOUBLE1 FROM PLATFORM_ENTITY.GLOBAL_VIEW2 WHERE ORGANIZATION_ID = '00Dxx0000002Col' AND TEXT1='Test' AND INT1=1 ORDER BY TEXT1 DESC, INT1; The secondary index will be correctly used. -- This message was sent by Atlassian JIRA (v6.3.4#6332)