-- +goose Up -- +goose StatementBegin -- ========================================= -- КРИТИЧЕСКИЕ GIST ИНДЕКСЫ ДЛЯ ГЕОПОИСКА -- ========================================= -- GIST индекс для геолокации пользователей (волонтёров) -- Используется для поиска волонтёров рядом с заявкой CREATE INDEX idx_users_location_gist ON users USING GIST(location) WHERE location IS NOT NULL AND deleted_at IS NULL; -- GIST индекс для геолокации заявок -- Используется для поиска заявок рядом с волонтёром CREATE INDEX idx_requests_location_gist ON requests USING GIST(location) WHERE deleted_at IS NULL; -- Составной GIST индекс для геолокации + статус заявки -- Критично для алгоритма матчинга: поиск только одобренных заявок рядом CREATE INDEX idx_requests_location_status_gist ON requests USING GIST(location) WHERE status = 'approved' AND deleted_at IS NULL; -- GIST индекс для геолокации активных заявок -- Используется для поиска заявок, готовых к выполнению CREATE INDEX idx_requests_location_active_gist ON requests USING GIST(location) WHERE status IN ('approved', 'in_progress') AND deleted_at IS NULL; COMMENT ON INDEX idx_users_location_gist IS 'GIST индекс для быстрого геопоиска волонтёров'; COMMENT ON INDEX idx_requests_location_gist IS 'GIST индекс для быстрого геопоиска всех заявок'; COMMENT ON INDEX idx_requests_location_status_gist IS 'GIST индекс для поиска одобренных заявок (алгоритм матчинга)'; COMMENT ON INDEX idx_requests_location_active_gist IS 'GIST индекс для поиска активных заявок'; -- +goose StatementEnd -- +goose Down -- +goose StatementBegin DROP INDEX IF EXISTS idx_requests_location_active_gist; DROP INDEX IF EXISTS idx_requests_location_status_gist; DROP INDEX IF EXISTS idx_requests_location_gist; DROP INDEX IF EXISTS idx_users_location_gist; -- +goose StatementEnd