From 5adfbd70d50d1f0b2e30d9a9fc488fe80855c54c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Poyraz=20K=C3=BC=C3=A7=C3=BCkarslan?= <83272398+PoyrazK@users.noreply.github.com> Date: Thu, 7 May 2026 20:28:32 +0300 Subject: [PATCH] Add composite indexes for split-horizon DNS queries Adds four indexes to schema.sql for common query patterns: - idx_dns_records_zone_name_type (zone_id, LOWER(name), type) - idx_dns_records_zone_name (zone_id, LOWER(name)) - idx_dns_records_zone_id (zone_id) - idx_dns_zones_tenant_id (tenant_id) Fixes: #71 --- internal/adapters/repository/schema.sql | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/internal/adapters/repository/schema.sql b/internal/adapters/repository/schema.sql index 7d40d17..eb00d64 100644 --- a/internal/adapters/repository/schema.sql +++ b/internal/adapters/repository/schema.sql @@ -92,7 +92,20 @@ CREATE INDEX idx_dns_zones_name_lower ON dns_zones (LOWER(name)); -- Expression index for efficient suffix-match zone lookup via reversed name -- Enables PostgreSQL to use index range scan instead of full table scan -CREATE INDEX idx_dns_zones_name_reverse ON dns_zones (REVERSE(name)); +CREATE INDEX IF NOT EXISTS idx_dns_zones_name_reverse ON dns_zones (REVERSE(name)); + +-- Composite indexes for split-horizon DNS queries +-- Covers zone_id + LOWER(name) + type pattern used by DeleteRecordsByNameAndType +CREATE INDEX IF NOT EXISTS idx_dns_records_zone_name_type ON dns_records(zone_id, LOWER(name), type); + +-- Covers zone_id + LOWER(name) pattern used by DeleteRecordsByName +CREATE INDEX IF NOT EXISTS idx_dns_records_zone_name ON dns_records(zone_id, LOWER(name)); + +-- Covers zone_id used by DeleteRecordsForZone bulk deletes +CREATE INDEX IF NOT EXISTS idx_dns_records_zone_id ON dns_records(zone_id); + +-- Tenant-scoped zone listing (ListZones, tenant isolation) +CREATE INDEX IF NOT EXISTS idx_dns_zones_tenant_id ON dns_zones(tenant_id); CREATE TABLE IF NOT EXISTS api_keys ( id UUID PRIMARY KEY,