From 1ab38e7d96610b441e99c1b0cd56e878a377e00d Mon Sep 17 00:00:00 2001 From: Dan White Date: Mon, 2 Jan 2023 22:05:19 -0600 Subject: [PATCH] update --- observations.sqbpro | 79 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 64 insertions(+), 15 deletions(-) diff --git a/observations.sqbpro b/observations.sqbpro index 2f9398f..c63189c 100644 --- a/observations.sqbpro +++ b/observations.sqbpro @@ -1,4 +1,4 @@ -
-- Indexes make the world go 'round ... faster. +
-- Indexes make the world go 'round ... faster. CREATE INDEX IF NOT EXISTS gs_norad_index ON observations(ground_station, norad_cat_id); @@ -16,23 +16,50 @@ ON observations(observer, ground_station); CREATE INDEX IF NOT EXISTS gs_observer_index ON observations(ground_station, observer); --- Special index for speeding up time range queries. + +-- Special index for speeding up time range queries. CREATE VIRTUAL TABLE IF NOT EXISTS times_index -USING rtree(id, start, end); +USING rtree( + id, + start, + end, + +ground_station INT, + +observer INT, + +norad_cat_id INT); INSERT OR REPLACE INTO times_index -SELECT id, strftime("%s", start), strftime("%s", end) +SELECT + id, + strftime("%s", start), + strftime("%s", end), + ground_station, + observer, + norad_cat_id FROM observations WHERE strftime("%s", start) <= strftime("%s", end); --- Add triggers to keep the times Rtree updated + +-- (commented out since it takes a long time, and is only needed once anyway) + +-- Add triggers to keep the times Rtree updated CREATE TRIGGER IF NOT EXISTS times_insert_trigger AFTER INSERT ON observations -WHEN strftime("%s", NEW.start) <= strftime("%s", NEW.end) +WHEN strftime("%s", NEW.start) <= strftime("%s", NEW.end) -- sanity check BEGIN - INSERT OR REPLACE INTO times_index(id, start, end) - VALUES (NEW.id, strftime("%s", NEW.start), strftime("%s", NEW.end)); + INSERT OR REPLACE INTO times_index( + id, + start, + end, + ground_station, + observer, + norad_cat_id) + VALUES (NEW.id, + strftime("%s", NEW.start), + strftime("%s", NEW.end), + NEW.ground_station, + NEW.observer, + NEW.norad_cat_id); END; @@ -41,18 +68,28 @@ AFTER UPDATE ON observations WHEN strftime("%s", NEW.start) <= strftime("%s", NEW.end) BEGIN - INSERT OR REPLACE INTO times_index(id, start, end) - VALUES (NEW.id, strftime("%s", NEW.start), strftime("%s", NEW.end)); + INSERT OR REPLACE INTO times_index( + id, + start, + end, + ground_station, + observer, + norad_cat_id) + VALUES (NEW.id, + strftime("%s", NEW.start), + strftime("%s", NEW.end), + NEW.ground_station, + NEW.observer, + NEW.norad_cat_id); END; CREATE TRIGGER IF NOT EXISTS times_delete_trigger AFTER DELETE ON observations BEGIN - DELETE FROM times_index - WHERE id = OLD.id; -END; --- Observers with un-vetted observations + DELETE FROM times_index + WHERE id = OLD.id; +END;-- Observers with un-vetted observations -- LONG SELECT observer, @@ -105,4 +142,16 @@ SELECT FROM observations GROUP BY observer ORDER BY num_obs DESC; -
+
+-- EXPLAIN QUERY PLAN +SELECT + observer, + count(distinct ground_station) AS num_gs, + count(id) AS num_obs, + ground_station +FROM times_index +WHERE start >= strftime("%s", "2022-01-01") + AND start < strftime("%s", "2023-01-01") +GROUP BY observer +ORDER BY num_obs DESC +LIMIT 10;
-- 2.25.1