56 lines
2.3 KiB
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
|
|
-- ============================================================================
|