New docs: - guides/pass-prediction.mdx: two-stage workflow (SP-GiST filter then SGP4 propagation), query window comparison tabs, GiST/SP-GiST coexistence example - reference/operators-gist.mdx: &? operator signature and description, observer_window type reference, SP-GiST operator class docs with eccentricity/HEO limitation aside Benchmarks on 14,376 CelesTrak active satellites: - SP-GiST index: 2,344 kB, builds in 19 ms - GiST index: 2,904 kB, builds in 45 ms - Consistency: 0 false negatives, 0 false positives - At 14k catalog size, seqscan (~6 ms) still beats index scan (~8 ms) due to low page count; cross-over expected at ~100k objects
203 lines
4.3 KiB
Plaintext
203 lines
4.3 KiB
Plaintext
Timing is on.
|
|
regime | n | pct
|
|
--------------------+-------+------
|
|
LEO (<2000km) | 13587 | 94.5
|
|
GEO/HEO (>34000km) | 588 | 4.1
|
|
MEO (2000-20000km) | 111 | 0.8
|
|
GEO-transfer | 90 | 0.6
|
|
(4 rows)
|
|
|
|
Time: 9.226 ms
|
|
--- CREATE SP-GiST INDEX ---
|
|
CREATE INDEX
|
|
Time: 18.724 ms
|
|
--- CREATE GiST INDEX ---
|
|
CREATE INDEX
|
|
Time: 44.994 ms
|
|
indexname | size
|
|
--------------------+---------
|
|
bench_catalog_pkey | 336 kB
|
|
bench_gist | 2904 kB
|
|
bench_spgist | 2344 kB
|
|
(3 rows)
|
|
|
|
Time: 3.750 ms
|
|
--- BENCHMARK 1: 2h window, Eagle Idaho, 10 deg min_el ---
|
|
SET
|
|
Time: 0.158 ms
|
|
SET
|
|
Time: 0.020 ms
|
|
seqscan_candidates
|
|
--------------------
|
|
2261
|
|
(1 row)
|
|
|
|
Time: 8.224 ms
|
|
RESET
|
|
Time: 0.102 ms
|
|
RESET
|
|
Time: 0.019 ms
|
|
SET
|
|
Time: 0.023 ms
|
|
spgist_candidates
|
|
-------------------
|
|
2261
|
|
(1 row)
|
|
|
|
Time: 9.787 ms
|
|
RESET
|
|
Time: 0.142 ms
|
|
--- BENCHMARK 2: 24h window, Eagle Idaho, 10 deg min_el ---
|
|
SET
|
|
Time: 0.044 ms
|
|
SET
|
|
Time: 0.013 ms
|
|
seqscan_candidates
|
|
--------------------
|
|
13562
|
|
(1 row)
|
|
|
|
Time: 4.272 ms
|
|
RESET
|
|
Time: 0.044 ms
|
|
RESET
|
|
Time: 0.015 ms
|
|
SET
|
|
Time: 0.017 ms
|
|
spgist_candidates
|
|
-------------------
|
|
13562
|
|
(1 row)
|
|
|
|
Time: 6.832 ms
|
|
RESET
|
|
Time: 0.065 ms
|
|
--- BENCHMARK 3: 2h window, Equator, 10 deg min_el ---
|
|
SET
|
|
Time: 0.025 ms
|
|
SET
|
|
Time: 0.010 ms
|
|
seqscan_candidates
|
|
--------------------
|
|
2073
|
|
(1 row)
|
|
|
|
Time: 5.868 ms
|
|
RESET
|
|
Time: 1.133 ms
|
|
RESET
|
|
Time: 0.083 ms
|
|
SET
|
|
Time: 0.032 ms
|
|
spgist_candidates
|
|
-------------------
|
|
2073
|
|
(1 row)
|
|
|
|
Time: 7.401 ms
|
|
RESET
|
|
Time: 0.105 ms
|
|
--- BENCHMARK 4: 2h window, Eagle Idaho, 45 deg min_el ---
|
|
SET
|
|
Time: 0.034 ms
|
|
SET
|
|
Time: 0.010 ms
|
|
seqscan_candidates
|
|
--------------------
|
|
1407
|
|
(1 row)
|
|
|
|
Time: 5.641 ms
|
|
RESET
|
|
Time: 0.153 ms
|
|
RESET
|
|
Time: 0.018 ms
|
|
SET
|
|
Time: 0.048 ms
|
|
spgist_candidates
|
|
-------------------
|
|
1407
|
|
(1 row)
|
|
|
|
Time: 6.581 ms
|
|
RESET
|
|
Time: 0.062 ms
|
|
--- CONSISTENCY CHECK ---
|
|
SET
|
|
Time: 0.049 ms
|
|
SET
|
|
Time: 0.012 ms
|
|
SELECT 2261
|
|
Time: 7.979 ms
|
|
RESET
|
|
Time: 0.159 ms
|
|
RESET
|
|
Time: 0.024 ms
|
|
SET
|
|
Time: 0.030 ms
|
|
SELECT 2261
|
|
Time: 7.533 ms
|
|
RESET
|
|
Time: 0.487 ms
|
|
in_seq_not_idx
|
|
----------------
|
|
0
|
|
(1 row)
|
|
|
|
Time: 1.214 ms
|
|
in_idx_not_seq
|
|
----------------
|
|
0
|
|
(1 row)
|
|
|
|
Time: 0.864 ms
|
|
DROP TABLE
|
|
Time: 1.814 ms
|
|
--- EXPLAIN ANALYZE: SP-GiST scan ---
|
|
SET
|
|
Time: 0.064 ms
|
|
QUERY PLAN
|
|
----------------------------------------------------------------------------------------------------------------------------------------
|
|
Aggregate (cost=51.38..51.39 rows=1 width=8) (actual time=7.322..7.325 rows=1.00 loops=1)
|
|
Buffers: shared hit=1075
|
|
-> Bitmap Heap Scan on bench_catalog (cost=4.38..51.35 rows=14 width=0) (actual time=6.921..7.255 rows=2261.00 loops=1)
|
|
Recheck Cond: (tle &? '("43.6977N 116.3535W 760m","2026-02-16 19:00:00-07","2026-02-16 21:00:00-07",10)'::observer_window)
|
|
Heap Blocks: exact=187
|
|
Buffers: shared hit=1075
|
|
-> Bitmap Index Scan on bench_spgist (cost=0.00..4.38 rows=14 width=0) (actual time=6.887..6.888 rows=2261.00 loops=1)
|
|
Index Cond: (tle &? '("43.6977N 116.3535W 760m","2026-02-16 19:00:00-07","2026-02-16 21:00:00-07",10)'::observer_window)
|
|
Index Searches: 1
|
|
Buffers: shared hit=888
|
|
Planning Time: 0.143 ms
|
|
Execution Time: 7.365 ms
|
|
(12 rows)
|
|
|
|
Time: 7.974 ms
|
|
RESET
|
|
Time: 0.084 ms
|
|
--- EXPLAIN ANALYZE: Sequential scan ---
|
|
SET
|
|
Time: 0.023 ms
|
|
SET
|
|
Time: 0.011 ms
|
|
QUERY PLAN
|
|
------------------------------------------------------------------------------------------------------------------------------
|
|
Aggregate (cost=470.74..470.75 rows=1 width=8) (actual time=6.037..6.039 rows=1.00 loops=1)
|
|
Buffers: shared hit=291
|
|
-> Seq Scan on bench_catalog (cost=0.00..470.70 rows=14 width=0) (actual time=0.016..5.952 rows=2261.00 loops=1)
|
|
Filter: (tle &? '("43.6977N 116.3535W 760m","2026-02-16 19:00:00-07","2026-02-16 21:00:00-07",10)'::observer_window)
|
|
Rows Removed by Filter: 12115
|
|
Buffers: shared hit=291
|
|
Planning Time: 0.130 ms
|
|
Execution Time: 6.066 ms
|
|
(8 rows)
|
|
|
|
Time: 6.589 ms
|
|
RESET
|
|
Time: 0.088 ms
|
|
RESET
|
|
Time: 2.471 ms
|
|
DROP TABLE
|
|
Time: 3.314 ms
|
|
Timing is off.
|