Phoenix Performance Result :: Mon Sep 16 16:38:56 PDT 2013

Queries by Category


Aggregation

select count(*) from AGGREGATION_TABLE
select count(1) from AGGREGATION_TABLE group by HOST
select core, count(1) from AGGREGATION_TABLE group by CORE
select core, host, sum(ACTIVE_VISITOR) from AGGREGATION_TABLE group by core, host
select AVG(DB), MIN(CORE), MAX(ACTIVE_VISITOR) from AGGREGATION_TABLE where host='CS' and DOMAIN<>'Google.com'
select round(date, 'day',50), sum(core)+2 from AGGREGATION_TABLE where (CORE<10 or CORE>90) group by round(date, 'day',50), host
select trunc(date, 'hour', 1000), count(DB), count(ACTIVE_VISITOR) from AGGREGATION_TABLE where feature='Login' and (core<50 or db<20 or active_visitor > 200) group by trunc(date, 'hour', 1000)
select count(active_visitor) count from AGGREGATION_TABLE
select count(distinct active_visitor) count from AGGREGATION_TABLE
select count(core), count(db), count(active_visitor) from AGGREGATION_TABLE
select core, count(db) count from AGGREGATION_TABLE group by CORE
select count(core) from AGGREGATION_TABLE where core < 10 and db < 200
select count(core) from AGGREGATION_TABLE where core < 10 and active_visitor < 1000
select count(core) from AGGREGATION_TABLE where core > 90

ColumnFamilies-Multiple

select count(1) from CF_TABLE_14CF where K1 in ('A', 'B', 'C', 'D')
select count(1) from CF_TABLE_14CF where K1 in ('A', 'C')
select count(*) from CF_TABLE_14CF where N < 1000
select a,b,c,d,e,f,g,h,i,j,k,l,m,n from CF_TABLE_14CF where (B>1000 and B<2000) and (M>1000 and M<2000)
select sum(a),sum(e),sum(j),sum(n) from CF_TABLE_14CF group by K1

ColumnFamilies-Single

select count(1) from CF_TABLE_1CF where K1 in ('A', 'B', 'C', 'D')
select count(1) from CF_TABLE_1CF where K1 in ('A', 'C')
select count(*) from CF_TABLE_1CF where N < 1000
select a,b,c,d,e,f,g,h,i,j,k,l,m,n from CF_TABLE_1CF where B>1000 and B<2000 and M>1000 and M<2000
select sum(a),sum(e),sum(j),sum(n) from CF_TABLE_1CF group by K1

Count Distinct

select count(distinct core), count(distinct db), count(distinct active_visitor) from AGGREGATION_TABLE
select core, count(distinct db) count from AGGREGATION_TABLE group by CORE

IN/LIKE Clause

select count(core) from AGGREGATION_TABLE where core IN (1,25,50,75,100)
select count(1) from IN_LIKE_TABLE where K1 in ('Z', 'D', 'F', 'X')
select * from IN_LIKE_TABLE where K1 in ('A','B') and K2 in ('xxx1000000','xxx2000000','xxx2000001')
select * from IN_LIKE_TABLE where K1 in ('A', 'C', 'E', 'F', 'H') and K2 like 'xxxxxx1%'
select count(*) from IN_LIKE_TABLE where K1 in ('X','A','B','C','D','E','F','G','H','I','Z') and K2 like '%1%'
select count(*) from IN_LIKE_TABLE where (K1 in ('A','E','F','G','H','I','Z') or K1 like 'E%') and (K2 like '%xx1%' or K2 like '%xxxxxx2%')

Index

select count(*) from INDEXED_TABLE
select /*+ INDEX(INDEXED_TABLE idx1 idx2 idx3 idx4) */ count(*) from INDEXED_TABLE
select /*+ INDEX(INDEXED_TABLE ids1 ids2 ids3 ids4) */ count(*) from INDEXED_TABLE
select /*+NO_INDEX*/ count(*) from INDEXED_TABLE
select round(date, 'day',50), sum(core)+2 from INDEXED_TABLE where (CORE<10 or CORE>90) group by round(date, 'day',50), host
select /*+NO_INDEX*/ round(date, 'day',50), sum(core)+2 from INDEXED_TABLE where (CORE<10 or CORE>90) group by round(date, 'day',50), host
select count(core) from INDEXED_TABLE where core IN (1,100)
select /*+ INDEX(INDEXED_TABLE idx1 idx2 idx3 idx4) */ count(core) from INDEXED_TABLE where core IN (1,100)
select /*+ INDEX(INDEXED_TABLE ids1 ids2 ids3 ids4) */ count(core) from INDEXED_TABLE where core IN (1,100)
select /*+NO_INDEX*/ count(core) from INDEXED_TABLE where core IN (1,100)
select count(core) from INDEXED_TABLE where core IN (1,25,50,75,100)
select /*+ INDEX(INDEXED_TABLE idx1 idx2 idx3 idx4) */ count(core) from INDEXED_TABLE where core IN (1,25,50,75,100)
select /*+ INDEX(INDEXED_TABLE ids1 ids2 ids3 ids4) */ count(core) from INDEXED_TABLE where core IN (1,25,50,75,100)
select /*+NO_INDEX*/ count(core) from INDEXED_TABLE where core IN (1,25,50,75,100)
select count(core) from INDEXED_TABLE where core < 10 and db < 200
select /*+ INDEX(INDEXED_TABLE idx1 idx2 idx3 idx4) */ count(core) from INDEXED_TABLE where core < 10 and db < 200
select /*+ INDEX(INDEXED_TABLE ids1 ids2 ids3 ids4) */ count(core) from INDEXED_TABLE where core < 10 and db < 200
select /*+NO_INDEX*/ count(core) from INDEXED_TABLE where core < 10 and db < 200
select count(core) from INDEXED_TABLE where core < 100 and db < 2000
select /*+NO_INDEX*/ count(core) from INDEXED_TABLE where core < 100 and db < 2000
select count(core) from INDEXED_TABLE where core > 90
select /*+NO_INDEX*/ count(core) from INDEXED_TABLE where core > 90
select count(core) from INDEXED_TABLE where core > 0
select /*+NO_INDEX*/ count(core) from INDEXED_TABLE where core > 0
select db from INDEXED_TABLE where db >5 and db <7 order by db
select /*+NO_INDEX*/ db from INDEXED_TABLE where db >5 and db <7 order by db
select db from INDEXED_TABLE order by db limit 10
select /*+NO_INDEX*/ db from INDEXED_TABLE order by db limit 10

Index Creation After Data

CREATE INDEX idx5 ON INDEXED_TABLE (CORE) INCLUDE (DB,ACTIVE_VISITOR)

Load Data

LOAD DATA AGGREGATION_TABLE [4000000 ROWS]
LOAD DATA IN_LIKE_TABLE [4000000 ROWS]
LOAD DATA INDEXED_TABLE [4000000 ROWS]
LOAD DATA CF_TABLE_14CF [4000000 ROWS]
LOAD DATA SALTED_TABLE [4000000 ROWS]
LOAD DATA CF_TABLE_1CF [4000000 ROWS]

Percentile

select percentile_cont(0.9) within group (order by active_visitor asc) from AGGREGATION_TABLE
select percentile_cont(0.1) within group (order by active_visitor desc) from AGGREGATION_TABLE
select percentile_cont(0.5) within group (order by core asc), percentile_cont(0.5) within group (order by db asc), percentile_cont(0.5) within group (order by active_visitor asc) from AGGREGATION_TABLE
select core, percentile_cont(0.9999) within group (order by db asc) from AGGREGATION_TABLE group by CORE

Salting

select count(1) from SALTED_TABLE where K1 in ('A', 'B', 'C', 'D')
select count(*) from SALTED_TABLE where D < 1000
select avg(c),avg(d) from SALTED_TABLE group by K1

Upsert Select

upsert into CF_TABLE_14CF_UPSERTSELECT select * from CF_TABLE_14CF
upsert into CF_TABLE_1CF_UPSERTSELECT select * from CF_TABLE_1CF



Queries by Table



AGGREGATION_TABLE


Table used for various aggregation functions

ROWS 4000000 [4M]

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)) SPLIT ON ('CSGoogle','CSSalesforce','EUApple','EUGoogle','EUSalesforce','NAApple','NAGoogle','NASalesforce')

DATA GENERATOR
STRING :: Values: NA|CS|EU
STRING :: Values: Salesforce.com|Apple.com|Google.com|Yelp.com
STRING :: Values: Login|Report|Dashboard|Sales|UI
DATE :: Values: SEQUENTIAL
INTEGER :: Max. Value: 100 Values: RANDOM
INTEGER :: Max. Value: 2000 Values: RANDOM
INTEGER :: Max. Value: 10000 Values: RANDOM

select count(*) from AGGREGATION_TABLE
select count(1) from AGGREGATION_TABLE group by HOST
select core, count(1) from AGGREGATION_TABLE group by CORE
select core, host, sum(ACTIVE_VISITOR) from AGGREGATION_TABLE group by core, host
select AVG(DB), MIN(CORE), MAX(ACTIVE_VISITOR) from AGGREGATION_TABLE where host='CS' and DOMAIN<>'Google.com'
select round(date, 'day',50), sum(core)+2 from AGGREGATION_TABLE where (CORE<10 or CORE>90) group by round(date, 'day',50), host
select trunc(date, 'hour', 1000), count(DB), count(ACTIVE_VISITOR) from AGGREGATION_TABLE where feature='Login' and (core<50 or db<20 or active_visitor > 200) group by trunc(date, 'hour', 1000)
select count(active_visitor) count from AGGREGATION_TABLE
select count(distinct active_visitor) count from AGGREGATION_TABLE
select percentile_cont(0.9) within group (order by active_visitor asc) from AGGREGATION_TABLE
select percentile_cont(0.1) within group (order by active_visitor desc) from AGGREGATION_TABLE
select count(core), count(db), count(active_visitor) from AGGREGATION_TABLE
select count(distinct core), count(distinct db), count(distinct active_visitor) from AGGREGATION_TABLE
select percentile_cont(0.5) within group (order by core asc), percentile_cont(0.5) within group (order by db asc), percentile_cont(0.5) within group (order by active_visitor asc) from AGGREGATION_TABLE
select core, count(db) count from AGGREGATION_TABLE group by CORE
select core, count(distinct db) count from AGGREGATION_TABLE group by CORE
select core, percentile_cont(0.9999) within group (order by db asc) from AGGREGATION_TABLE group by CORE
select count(core) from AGGREGATION_TABLE where core IN (1,25,50,75,100)
select count(core) from AGGREGATION_TABLE where core < 10 and db < 200
select count(core) from AGGREGATION_TABLE where core < 10 and active_visitor < 1000
select count(core) from AGGREGATION_TABLE where core > 90
LOAD DATA AGGREGATION_TABLE [4000000 ROWS]

IN_LIKE_TABLE


Phoenix 1.2+ uses skip scan that gives significant performance improvement for IN/LIKE queries.

ROWS 4000000 [4M]

DDL CREATE TABLE IF NOT EXISTS $TABLE (K1 CHAR(1) NOT NULL, K2 VARCHAR NOT NULL, CF.A INTEGER, CF.B VARCHAR, CF.C VARCHAR CONSTRAINT PK PRIMARY KEY (K1,K2)) SPLIT ON ('B','C','D','E','F','G','H','I')

DATA GENERATOR
STRING :: Values: A|B|C|D|E|F|G|H|I
STRING :: Length: 10 Values: SEQUENTIAL
INTEGER :: Max. Value: 1000000 Values: RANDOM
STRING :: Length: 50 Values: RANDOM
STRING :: Length: 50 Values: RANDOM

select count(1) from IN_LIKE_TABLE where K1 in ('Z', 'D', 'F', 'X')
select * from IN_LIKE_TABLE where K1 in ('A','B') and K2 in ('xxx1000000','xxx2000000','xxx2000001')
select * from IN_LIKE_TABLE where K1 in ('A', 'C', 'E', 'F', 'H') and K2 like 'xxxxxx1%'
select count(*) from IN_LIKE_TABLE where K1 in ('X','A','B','C','D','E','F','G','H','I','Z') and K2 like '%1%'
select count(*) from IN_LIKE_TABLE where (K1 in ('A','E','F','G','H','I','Z') or K1 like 'E%') and (K2 like '%xx1%' or K2 like '%xxxxxx2%')
LOAD DATA IN_LIKE_TABLE [4000000 ROWS]

INDEXED_TABLE


Indexing test. Phoenix 2.0+ feature. See explain plan by hovering over version label to see which index table is used.

ROWS 4000000 [4M]

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;

DATA GENERATOR
STRING :: Values: NA|CS|EU
STRING :: Values: Salesforce.com|Apple.com|Google.com|Yelp.com
STRING :: Values: Login|Report|Dashboard|Sales|UI
DATE :: Values: SEQUENTIAL
INTEGER :: Max. Value: 100 Values: RANDOM
INTEGER :: Max. Value: 2000 Values: RANDOM
INTEGER :: Max. Value: 10000 Values: RANDOM

select count(*) from INDEXED_TABLE
select /*+ INDEX(INDEXED_TABLE idx1 idx2 idx3 idx4) */ count(*) from INDEXED_TABLE
select /*+ INDEX(INDEXED_TABLE ids1 ids2 ids3 ids4) */ count(*) from INDEXED_TABLE
select /*+NO_INDEX*/ count(*) from INDEXED_TABLE
select round(date, 'day',50), sum(core)+2 from INDEXED_TABLE where (CORE<10 or CORE>90) group by round(date, 'day',50), host
select /*+NO_INDEX*/ round(date, 'day',50), sum(core)+2 from INDEXED_TABLE where (CORE<10 or CORE>90) group by round(date, 'day',50), host
select count(core) from INDEXED_TABLE where core IN (1,100)
select /*+ INDEX(INDEXED_TABLE idx1 idx2 idx3 idx4) */ count(core) from INDEXED_TABLE where core IN (1,100)
select /*+ INDEX(INDEXED_TABLE ids1 ids2 ids3 ids4) */ count(core) from INDEXED_TABLE where core IN (1,100)
select /*+NO_INDEX*/ count(core) from INDEXED_TABLE where core IN (1,100)
select count(core) from INDEXED_TABLE where core IN (1,25,50,75,100)
select /*+ INDEX(INDEXED_TABLE idx1 idx2 idx3 idx4) */ count(core) from INDEXED_TABLE where core IN (1,25,50,75,100)
select /*+ INDEX(INDEXED_TABLE ids1 ids2 ids3 ids4) */ count(core) from INDEXED_TABLE where core IN (1,25,50,75,100)
select /*+NO_INDEX*/ count(core) from INDEXED_TABLE where core IN (1,25,50,75,100)
select count(core) from INDEXED_TABLE where core < 10 and db < 200
select /*+ INDEX(INDEXED_TABLE idx1 idx2 idx3 idx4) */ count(core) from INDEXED_TABLE where core < 10 and db < 200
select /*+ INDEX(INDEXED_TABLE ids1 ids2 ids3 ids4) */ count(core) from INDEXED_TABLE where core < 10 and db < 200
select /*+NO_INDEX*/ count(core) from INDEXED_TABLE where core < 10 and db < 200
select count(core) from INDEXED_TABLE where core < 100 and db < 2000
select /*+NO_INDEX*/ count(core) from INDEXED_TABLE where core < 100 and db < 2000
select count(core) from INDEXED_TABLE where core > 90
select /*+NO_INDEX*/ count(core) from INDEXED_TABLE where core > 90
select count(core) from INDEXED_TABLE where core > 0
select /*+NO_INDEX*/ count(core) from INDEXED_TABLE where core > 0
select db from INDEXED_TABLE where db >5 and db <7 order by db
select /*+NO_INDEX*/ db from INDEXED_TABLE where db >5 and db <7 order by db
select db from INDEXED_TABLE order by db limit 10
select /*+NO_INDEX*/ db from INDEXED_TABLE order by db limit 10
CREATE INDEX idx5 ON INDEXED_TABLE (CORE) INCLUDE (DB,ACTIVE_VISITOR)
LOAD DATA INDEXED_TABLE [4000000 ROWS]

CF_TABLE_14CF


Data is split in 14 column families. Phoenix 1.2+ uses Essential Column Family filter feature which fetches only required columns when filtering rows.

ROWS 4000000 [4M]

DDL CREATE TABLE IF NOT EXISTS $TABLE (K1 CHAR(1) NOT NULL, K2 VARCHAR NOT NULL, CF1.A INTEGER, CF2.B INTEGER, CF3.C INTEGER, CF4.D INTEGER, CF5.E INTEGER, CF6.F INTEGER, CF7.G INTEGER, CF8.H INTEGER, CF9.I INTEGER, CF10.J INTEGER, CF11.K INTEGER, CF12.L INTEGER, CF13.M INTEGER, CF14.N INTEGER CONSTRAINT PK PRIMARY KEY (K1,K2)) SPLIT ON ('B','C','D');CREATE TABLE IF NOT EXISTS $TABLE_UPSERTSELECT (K1 CHAR(1) NOT NULL, K2 VARCHAR NOT NULL, CF1.A INTEGER, CF2.B INTEGER, CF3.C INTEGER, CF4.D INTEGER, CF5.E INTEGER, CF6.F INTEGER, CF7.G INTEGER, CF8.H INTEGER, CF9.I INTEGER, CF10.J INTEGER, CF11.K INTEGER, CF12.L INTEGER, CF13.M INTEGER, CF14.N INTEGER CONSTRAINT PK PRIMARY KEY (K1,K2)) SPLIT ON ('B','C','D')

DATA GENERATOR
STRING :: Values: A|B|C|D
STRING :: Length: 10 Values: SEQUENTIAL
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM

select count(1) from CF_TABLE_14CF where K1 in ('A', 'B', 'C', 'D')
select count(1) from CF_TABLE_14CF where K1 in ('A', 'C')
select count(*) from CF_TABLE_14CF where N < 1000
select a,b,c,d,e,f,g,h,i,j,k,l,m,n from CF_TABLE_14CF where (B>1000 and B<2000) and (M>1000 and M<2000)
select sum(a),sum(e),sum(j),sum(n) from CF_TABLE_14CF group by K1
upsert into CF_TABLE_14CF_UPSERTSELECT select * from CF_TABLE_14CF
LOAD DATA CF_TABLE_14CF [4000000 ROWS]

SALTED_TABLE


This is Phoenix 1.2+ feature. Data is split in 4 regions equal to number of region servers in test cluster by adding salted byte to each key.

ROWS 4000000 [4M]

DDL CREATE TABLE $TABLE (K1 CHAR(1) NOT NULL, K2 VARCHAR NOT NULL, CFA.A VARCHAR, CFA.B CHAR(100), CFA.C INTEGER, CFB.D INTEGER CONSTRAINT PK PRIMARY KEY (K1,K2)) SALT_BUCKETS=4

DATA GENERATOR
STRING :: Values: A|B|C|D
STRING :: Length: 10 Values: SEQUENTIAL
STRING :: Length: 100 Values: RANDOM
STRING :: Length: 100 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM

select count(1) from SALTED_TABLE where K1 in ('A', 'B', 'C', 'D')
select count(*) from SALTED_TABLE where D < 1000
select avg(c),avg(d) from SALTED_TABLE group by K1
LOAD DATA SALTED_TABLE [4000000 ROWS]

CF_TABLE_1CF


Same data as in 14 column family table but this one only has a single column family. Performance should be worse in most cases.

ROWS 4000000 [4M]

DDL CREATE TABLE IF NOT EXISTS $TABLE (K1 CHAR(1) NOT NULL, K2 VARCHAR NOT NULL, CF.A INTEGER, CF.B INTEGER, CF.C INTEGER, CF.D INTEGER, CF.E INTEGER, CF.F INTEGER, CF.G INTEGER, CF.H INTEGER, CF.I INTEGER, CF.J INTEGER, CF.K INTEGER, CF.L INTEGER, CF.M INTEGER, CF.N INTEGER CONSTRAINT PK PRIMARY KEY (K1,K2)) SPLIT ON ('B','C','D');CREATE TABLE IF NOT EXISTS $TABLE_UPSERTSELECT (K1 CHAR(1) NOT NULL, K2 VARCHAR NOT NULL, CF.A INTEGER, CF.B INTEGER, CF.C INTEGER, CF.D INTEGER, CF.E INTEGER, CF.F INTEGER, CF.G INTEGER, CF.H INTEGER, CF.I INTEGER, CF.J INTEGER, CF.K INTEGER, CF.L INTEGER, CF.M INTEGER, CF.N INTEGER CONSTRAINT PK PRIMARY KEY (K1,K2)) SPLIT ON ('B','C','D')

DATA GENERATOR
STRING :: Values: A|B|C|D
STRING :: Length: 10 Values: SEQUENTIAL
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM
INTEGER :: Max. Value: 1000000 Values: RANDOM

select count(1) from CF_TABLE_1CF where K1 in ('A', 'B', 'C', 'D')
select count(1) from CF_TABLE_1CF where K1 in ('A', 'C')
select count(*) from CF_TABLE_1CF where N < 1000
select a,b,c,d,e,f,g,h,i,j,k,l,m,n from CF_TABLE_1CF where B>1000 and B<2000 and M>1000 and M<2000
select sum(a),sum(e),sum(j),sum(n) from CF_TABLE_1CF group by K1
upsert into CF_TABLE_1CF_UPSERTSELECT select * from CF_TABLE_1CF
LOAD DATA CF_TABLE_1CF [4000000 ROWS]


Note: Hover over version label to see Phoenix Query Explain Plan.