Introduction
SQLite est souvent sous-estimé pour les environnements de production. Pourtant, avec les bonnes configurations et techniques avancées, il peut gérer des millions d'enregistrements avec une latence inférieure à 1 ms. Ce tutoriel vous guide à travers l'optimisation réelle : activation du mode WAL, création d'index composites intelligents, utilisation de FTS5 pour la recherche plein texte et tuning précis des PRAGMA. Chaque section inclut du code directement utilisable.
Prérequis
- SQLite 3.42+
- Connaissances solides en SQL et indexation
- Node.js 20+ avec better-sqlite3
- Accès à un terminal et éditeur de code
Activer le mode WAL
PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL;
PRAGMA wal_autocheckpoint = 1000;Le mode WAL permet des lectures concurrentes sans verrouillage. synchronous=NORMAL offre le meilleur compromis performance/sécurité. Le checkpoint automatique évite que le fichier WAL grossisse indéfiniment.
Créer des index composites
CREATE INDEX idx_orders_customer_date
ON orders(customer_id, created_at DESC)
WHERE status = 'completed';Un index composite couvrant les colonnes les plus filtrées et triées évite les scans complets. La clause WHERE partielle réduit la taille de l'index et améliore les performances des requêtes courantes.
Configurer les PRAGMA critiques
PRAGMA cache_size = -64000;
PRAGMA temp_store = MEMORY;
PRAGMA mmap_size = 30000000000;Cache de 64 Mo en négatif, stockage temporaire en mémoire et mmap de 30 Go permettent à SQLite d'exploiter pleinement la RAM disponible sans surcharge disque.
Mettre en place FTS5
CREATE VIRTUAL TABLE documents_fts
USING fts5(title, content, tokenize='porter unicode61');FTS5 avec tokenizer porter et unicode61 offre une recherche plein texte performante et pertinente. Il gère automatiquement la flexion des mots et les caractères spéciaux.
Requête optimisée avec FTS5
SELECT d.id, d.title, rank
FROM documents d
JOIN documents_fts ON d.id = documents_fts.rowid
WHERE documents_fts MATCH 'optimisation production'
ORDER BY rank;La jointure avec documents_fts et l'utilisation de rank permettent un tri par pertinence. SQLite utilise l'index FTS5 pour éviter tout scan de table.
Bonnes pratiques
- Toujours activer WAL et vérifier le checkpoint régulier
- Créer des index partiels sur les données actives uniquement
- Utiliser des transactions explicites pour les batchs
- Surveiller la taille du fichier WAL et du journal
- Exécuter VACUUM après de grosses suppressions
Erreurs courantes à éviter
- Oublier de passer en WAL avant le chargement des données
- Créer trop d'index sans tester les requêtes réelles
- Ignorer les PRAGMA cache_size et mmap_size
- Ne pas configurer de limite de taille pour les WAL
Pour aller plus loin
Approfondissez ces concepts avec nos formations expertes sur les bases de données embarquées. Découvrez nos formations Learni.