44 lines
2.3 KiB
SQL
44 lines
2.3 KiB
SQL
-- +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
|