From 095289d6f046cfbd50aa35fe49bb166781323432 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Mon, 21 Jul 2025 14:07:08 -0500 Subject: [PATCH] Add database indexes for weather data queries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add partial index on temperature column for weather stations - Add compound index on received_at + temperature for time-based queries - Add sender + temperature index for station-specific weather queries - Add individual indexes on humidity, pressure, and wind_speed - All indexes use WHERE clause to only include non-null values These indexes will significantly improve performance for: - Finding weather stations on the map - Weather history queries - Weather data filtering 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .../20250721190613_add_weather_indexes.exs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 priv/repo/migrations/20250721190613_add_weather_indexes.exs diff --git a/priv/repo/migrations/20250721190613_add_weather_indexes.exs b/priv/repo/migrations/20250721190613_add_weather_indexes.exs new file mode 100644 index 0000000..43b3d5c --- /dev/null +++ b/priv/repo/migrations/20250721190613_add_weather_indexes.exs @@ -0,0 +1,26 @@ +defmodule Aprsme.Repo.Migrations.AddWeatherIndexes do + use Ecto.Migration + + def up do + # Index for finding stations with weather data + create index(:packets, [:temperature], where: "temperature IS NOT NULL") + + # Compound index for time-based weather queries + create index(:packets, [:received_at, :temperature], where: "temperature IS NOT NULL") + + # Additional weather-related indexes for common queries + create index(:packets, [:sender, :temperature], where: "temperature IS NOT NULL") + create index(:packets, [:humidity], where: "humidity IS NOT NULL") + create index(:packets, [:pressure], where: "pressure IS NOT NULL") + create index(:packets, [:wind_speed], where: "wind_speed IS NOT NULL") + end + + def down do + drop index(:packets, [:temperature]) + drop index(:packets, [:received_at, :temperature]) + drop index(:packets, [:sender, :temperature]) + drop index(:packets, [:humidity]) + drop index(:packets, [:pressure]) + drop index(:packets, [:wind_speed]) + end +end