Random data: sensor_id uniform random in [0, 100,000) Sorted data: sensor_id = 0,0,…,1,1,…,2,2,… (clustered, ~10 rows/value)
Stores min/max per chunk. Can skip chunks whose range doesn't overlap the query. Only effective when data is sorted/clustered. Useless on random data.
──────────────────────────────────────────────────────────────────────
Random data — BUCKET index
──────────────────────────────────────────────────────────────────────
SELECTIVITY ROWS SCAN(ms) IDX(ms) SPEEDUP
────────────── ───────── ───────── ───────── ────────
0.1% 922 12.8 10.1 1.3×
1% 9,879 13.7 14.7 0.9×
5% 49,991 17.1 17.9 1.0×
10% 99,775 19.8 21.0 0.9×
25% 249,376 24.0 25.0 1.0×
50% 499,826 24.0 27.2 0.9× (slower)
75% 749,665 23.2 27.5 0.8× (slower)
──────────────────────────────────────────────────────────────────────
──────────────────────────────────────────────────────────────────────
Sorted data — BUCKET index
──────────────────────────────────────────────────────────────────────
SELECTIVITY ROWS SCAN(ms) IDX(ms) SPEEDUP
────────────── ───────── ───────── ───────── ────────
0.1% 990 11.9 2.5 4.8× ←
1% 9,990 11.9 2.2 5.5× ←
5% 49,990 12.0 3.1 3.9× ←
10% 99,990 12.1 5.1 2.4× ←
25% 249,990 11.7 9.3 1.3×
50% 499,990 12.3 19.0 0.6× (slower)
75% 749,990 11.9 35.9 0.3× (slower)
──────────────────────────────────────────────────────────────────────
Stores exact row positions. Works on any data layout. Smaller index than FULL; slightly less overhead to build.
──────────────────────────────────────────────────────────────────────
Random data — PARTIAL index
──────────────────────────────────────────────────────────────────────
SELECTIVITY ROWS SCAN(ms) IDX(ms) SPEEDUP
────────────── ───────── ───────── ───────── ────────
0.1% 922 12.4 1.9 6.4× ←
1% 9,879 14.4 2.5 5.8× ←
5% 49,991 17.3 5.3 3.3× ←
10% 99,775 20.1 8.8 2.3× ←
25% 249,376 23.6 21.4 1.1×
50% 499,826 26.2 46.4 0.6× (slower)
75% 749,665 22.8 75.2 0.3× (slower)
──────────────────────────────────────────────────────────────────────
──────────────────────────────────────────────────────────────────────
Sorted data — PARTIAL index
──────────────────────────────────────────────────────────────────────
SELECTIVITY ROWS SCAN(ms) IDX(ms) SPEEDUP
────────────── ───────── ───────── ───────── ────────
0.1% 990 13.2 2.4 5.5× ←
1% 9,990 12.8 2.0 6.4× ←
5% 49,990 12.5 2.6 4.9× ←
10% 99,990 12.7 4.0 3.1× ←
25% 249,990 12.0 8.1 1.5×
50% 499,990 11.9 18.5 0.6× (slower)
75% 749,990 13.1 33.4 0.4× (slower)
──────────────────────────────────────────────────────────────────────
VALUE ROWS SCAN(ms) IDX(ms) SPEEDUP
──────────── ────── ───────── ───────── ────────
==0 12 12.6 2.0 6.3× ←
==25,000 13 14.2 1.9 7.5× ←
==50,000 9 12.6 1.9 6.7× ←
==99,999 4 12.4 1.9 6.7× ←
VALUE ROWS SCAN(ms) IDX(ms) SPEEDUP
──────────── ────── ───────── ───────── ────────
==0 10 11.8 1.9 6.3× ←
==25,000 10 11.7 1.8 6.7× ←
==50,000 10 12.0 1.7 7.0× ←
==99,999 10 12.1 1.7 7.1× ←
Stores exact row positions with full chunk coverage. Best query performance; larger index than PARTIAL.
──────────────────────────────────────────────────────────────────────
Random data — FULL index
──────────────────────────────────────────────────────────────────────
SELECTIVITY ROWS SCAN(ms) IDX(ms) SPEEDUP
────────────── ───────── ───────── ───────── ────────
0.1% 922 13.2 2.1 6.4× ←
1% 9,879 15.3 2.8 5.5× ←
5% 49,991 18.1 5.1 3.5× ←
10% 99,775 20.5 11.0 1.9×
25% 249,376 23.5 21.5 1.1×
50% 499,826 25.4 46.1 0.6× (slower)
75% 749,665 23.2 86.9 0.3× (slower)
──────────────────────────────────────────────────────────────────────
──────────────────────────────────────────────────────────────────────
Sorted data — FULL index
──────────────────────────────────────────────────────────────────────
SELECTIVITY ROWS SCAN(ms) IDX(ms) SPEEDUP
────────────── ───────── ───────── ───────── ────────
0.1% 990 12.0 1.9 6.4× ←
1% 9,990 12.0 2.0 6.1× ←
5% 49,990 11.5 2.8 4.1× ←
10% 99,990 12.0 4.2 2.9× ←
25% 249,990 11.9 7.8 1.5×
50% 499,990 11.8 18.5 0.6× (slower)
75% 749,990 11.5 44.5 0.3× (slower)
──────────────────────────────────────────────────────────────────────
VALUE ROWS SCAN(ms) IDX(ms) SPEEDUP
──────────── ────── ───────── ───────── ────────
==0 12 12.1 2.5 4.8× ←
==25,000 13 12.0 2.0 6.1× ←
==50,000 9 12.4 2.0 6.2× ←
==99,999 4 12.6 2.0 6.4× ←
VALUE ROWS SCAN(ms) IDX(ms) SPEEDUP
──────────── ────── ───────── ───────── ────────
==0 10 11.7 1.8 6.5× ←
==25,000 10 11.5 1.7 6.6× ←
==50,000 10 12.4 1.7 7.1× ←
==99,999 10 12.3 1.8 7.0× ←
Shows how repetition level affects speedup (data always sorted).
CARDINALITY 0.1% sel 1% sel 5% sel 10% sel
──────────────────────────────────────────────────────────────────────
High rep (10 uniq) 9.1× 9.6× 8.9× 10.1×
Med rep (1k uniq) 8.5× 6.2× 4.3× 3.5×
Low rep (1M uniq) 6.4× 5.9× 4.2× 3.2×
──────────────────────────────────────────────────────────────────────
(speedup — higher is better)
sensor_id > X AND region == Y | region in [0,8) → ~12.5% per value
────────────────────────────────────────────────────────────────────────────────
QUERY ROWS NO IDX IDX:sid IDX:reg 2 IDX BEST
────────────── ──────── ───────── ───────── ───────── ───────── ────────────
0.1%+12.5% 127 14.6ms 2.6ms 15.0ms 14.4ms sid(5.6×)
1%+12.5% 1,297 14.7ms 2.6ms 15.2ms 17.2ms sid(5.7×)
5%+12.5% 6,268 16.2ms 4.5ms 16.8ms 20.3ms sid(3.6×)
10%+12.5% 12,377 19.5ms 6.2ms 19.6ms 21.0ms sid(3.2×)
────────────────────────────────────────────────────────────────────────────────