inou/migrations/001_add_search_key.sql

56 lines
2.3 KiB
SQL

-- Migration: Add search_key column and optimize indices
-- Date: 2026-02-07
-- Purpose: Enable fast LOINC/gene/modality search for MCP API
-- ============================================================================
-- 1. Add search_key column
-- ============================================================================
ALTER TABLE entries ADD COLUMN search_key TEXT;
-- ============================================================================
-- 2. Drop redundant indices
-- ============================================================================
-- Redundant with idx_entries_search_key (which covers dossier_id, category)
DROP INDEX IF EXISTS idx_entries_dossier;
-- Redundant with idx_entries_search_key (which covers dossier_id, category, search_key)
DROP INDEX IF EXISTS idx_entries_dossier_category;
-- Redundant after code fix to always include dossier_id in parent queries
DROP INDEX IF EXISTS idx_entries_parent;
-- ============================================================================
-- 3. Add new index for search_key
-- ============================================================================
CREATE INDEX idx_entries_search_key
ON entries(dossier_id, category, search_key);
-- ============================================================================
-- 4. Backfill search_key from existing data
-- ============================================================================
-- Labs: Extract LOINC from data.loinc
UPDATE entries
SET search_key = json_extract(data, '$.loinc')
WHERE category = 3
AND search_key IS NULL
AND json_extract(data, '$.loinc') IS NOT NULL;
-- Genome: Extract gene from data.gene
UPDATE entries
SET search_key = json_extract(data, '$.gene')
WHERE category = 4
AND search_key IS NULL
AND json_extract(data, '$.gene') IS NOT NULL;
-- ============================================================================
-- Final index state:
-- ============================================================================
-- 1. sqlite_autoindex_entries_1 (entry_id) PRIMARY KEY
-- 2. idx_entries_dossier_parent (dossier_id, parent_id) KEPT
-- 3. idx_entries_search_key (dossier_id, category, search_key) NEW
-- ============================================================================