Mujtaba Chohan created PHOENIX-1645:
---------------------------------------
Summary: Wrong execution plan generated for indexed query which
leads to slow performance
Key: PHOENIX-1645
URL: https://issues.apache.org/jira/browse/PHOENIX-1645
Project: Phoenix
Issue Type: Bug
Affects Versions: 4.3
Reporter: Mujtaba Chohan
Assignee: James Taylor
Query: select /*+ INDEX(INDEXED_TABLE idx1 idx2 idx3 idx4) */ count(core) from
INDEXED_TABLE where core < 10 and db < 200
Optimal explain plan generated in Phoenix v4.2: 1-CHUNK PARALLEL 1-WAY RANGE
SCAN OVER IDX4 [*] - [10]
SERVER FILTER BY TO_LONG(DB) < 200
SERVER AGGREGATE INTO SINGLE ROW
*Wrong plan generated in 4.3 that uses skip scan join to base table.
Performance of this plan compared to v4.2 is close to 20X slower with 2M rows
data*: CLIENT 28-CHUNK PARALLEL 1-WAY FULL SCAN OVER INDEXED_TABLE
SERVER FILTER BY USAGE.DB < 200
SERVER AGGREGATE INTO SINGLE ROW
SKIP-SCAN-JOIN TABLE 0
CLIENT 1-CHUNK PARALLEL 1-WAY RANGE SCAN OVER IDX1 [*] - [10]
SERVER FILTER BY FIRST KEY ONLY
DYNAMIC SERVER FILTER BY ("HOST", "DOMAIN", "FEATURE", "DATE") IN
(($22.$24, $22.$25, $22.$26, $22.$27))
DDL: CREATE TABLE $TABLE (HOST CHAR(2) NOT NULL,DOMAIN VARCHAR NOT NULL,FEATURE
VARCHAR NOT NULL,DATE DATE NOT NULL,USAGE.CORE BIGINT,USAGE.DB
BIGINT,STATS.ACTIVE_VISITOR INTEGER CONSTRAINT PK PRIMARY KEY (HOST, DOMAIN,
FEATURE, DATE)) IMMUTABLE_ROWS=true,MAX_FILESIZE=30485760;CREATE INDEX idx1 ON
$TABLE (CORE);CREATE INDEX idx2 ON $TABLE (DB);CREATE INDEX idx3 ON $TABLE
(DB,ACTIVE_VISITOR);CREATE INDEX idx4 ON $TABLE (CORE,DB,ACTIVE_VISITOR);CREATE
INDEX ids1 ON $TABLE (CORE) SALT_BUCKETS=16;CREATE INDEX ids2 ON $TABLE (DB)
SALT_BUCKETS=16;CREATE INDEX ids3 ON $TABLE (DB,ACTIVE_VISITOR)
SALT_BUCKETS=16;CREATE INDEX ids4 ON $TABLE (CORE,DB,ACTIVE_VISITOR)
SALT_BUCKETS=16;
Also see perf. run at:
http://phoenix-bin.github.io/client/performance/phoenix-20150206042353.htm
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)