60 lines
2.9 KiB
MySQL
60 lines
2.9 KiB
MySQL
|
|
-- Migration: Support pour History Pagination, Message Search, et Offline Sync
|
||
|
|
-- Création: 2025-12-05
|
||
|
|
-- Version: 1.0.0
|
||
|
|
-- Description: Ajoute les index nécessaires pour la pagination, recherche et synchronisation
|
||
|
|
|
||
|
|
-- ================================================================
|
||
|
|
-- INDEX POUR PAGINATION (HISTORY)
|
||
|
|
-- ================================================================
|
||
|
|
|
||
|
|
-- Index composite pour la pagination efficace par conversation et date
|
||
|
|
-- Permet les requêtes ORDER BY created_at avec WHERE conversation_id
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_messages_conv_created_at
|
||
|
|
ON messages(conversation_id, created_at DESC);
|
||
|
|
|
||
|
|
-- Index pour les requêtes avec filtre is_deleted (pour exclure les messages supprimés)
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_messages_conv_created_not_deleted
|
||
|
|
ON messages(conversation_id, created_at DESC)
|
||
|
|
WHERE is_deleted = false;
|
||
|
|
|
||
|
|
-- ================================================================
|
||
|
|
-- INDEX POUR RECHERCHE TEXTUELLE
|
||
|
|
-- ================================================================
|
||
|
|
|
||
|
|
-- Extension pour recherche trigram (recherche partielle efficace)
|
||
|
|
CREATE EXTENSION IF NOT EXISTS pg_trgm;
|
||
|
|
|
||
|
|
-- Index GIN trigram pour recherche ILIKE performante sur content
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_messages_content_trgm
|
||
|
|
ON messages USING GIN(content gin_trgm_ops);
|
||
|
|
|
||
|
|
-- Index pour recherche avec filtre conversation_id + content
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_messages_conv_content_trgm
|
||
|
|
ON messages USING GIN(conversation_id, content gin_trgm_ops);
|
||
|
|
|
||
|
|
-- ================================================================
|
||
|
|
-- INDEX POUR SYNC OFFLINE
|
||
|
|
-- ================================================================
|
||
|
|
|
||
|
|
-- Index pour les requêtes WHERE created_at > timestamp (sync depuis)
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_messages_conv_created_sync
|
||
|
|
ON messages(conversation_id, created_at ASC)
|
||
|
|
WHERE is_deleted = false;
|
||
|
|
|
||
|
|
-- Index pour les requêtes WHERE updated_at > timestamp (pour les edits)
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_messages_conv_updated_sync
|
||
|
|
ON messages(conversation_id, updated_at ASC)
|
||
|
|
WHERE is_deleted = false;
|
||
|
|
|
||
|
|
-- ================================================================
|
||
|
|
-- COMMENTAIRES POUR DOCUMENTATION
|
||
|
|
-- ================================================================
|
||
|
|
|
||
|
|
COMMENT ON INDEX idx_messages_conv_created_at IS 'Index pour pagination efficace de l''historique par conversation';
|
||
|
|
COMMENT ON INDEX idx_messages_conv_created_not_deleted IS 'Index pour pagination en excluant les messages supprimés';
|
||
|
|
COMMENT ON INDEX idx_messages_content_trgm IS 'Index GIN trigram pour recherche textuelle performante sur le contenu';
|
||
|
|
COMMENT ON INDEX idx_messages_conv_content_trgm IS 'Index pour recherche textuelle par conversation';
|
||
|
|
COMMENT ON INDEX idx_messages_conv_created_sync IS 'Index pour synchronisation offline (messages depuis timestamp)';
|
||
|
|
COMMENT ON INDEX idx_messages_conv_updated_sync IS 'Index pour synchronisation offline (updates depuis timestamp)';
|
||
|
|
|