Que fait mysql-best-practices ?
Meilleures pratiques de développement MySQL pour la conception de schémas, l'optimisation des requêtes et l'administration de bases de données.
Conception de schéma
- Normalisation : Appliquer la 3NF (Troisième forme normale) sauf en cas de besoin de performance justifié.
- Indexation : Indexer les colonnes utilisées dans les clauses WHERE, JOIN et ORDER BY. Éviter les index sur des colonnes avec faible cardinalité.
- Types de données : Utiliser le type le plus approprié et le plus petit possible (par exemple,
BIGINTpour les grands entiers,VARCHAR(255)pour les chaînes courtes,DATETIMEpour les dates). - Clés primaires : Toujours définir une clé primaire, de préférence auto-incrémentée sur un
INTouBIGINT.
Optimisation des requêtes
- Expliquer les requêtes : Utiliser
EXPLAINpour analyser les plans d'exécution et identifier les goulots d'étranglement. - **Éviter SELECT *** : Spécifier uniquement les colonnes nécessaires pour réduire la charge et la mémoire.
- Limiter les résultats : Utiliser
LIMITpour restreindre le nombre de lignes renvoyées. - Jointures efficaces : Préférer les jointures basées sur des index et éviter les sous-requêtes non corrélées quand une jointure est plus efficace.
Administration de la base de données
- Sauvegardes : Planifier des sauvegardes régulières (logicielles et physiques) et tester leur restauration.
- Réplication : Configurer la réplication pour la haute disponibilité et la répartition de charge.
- Sécurité : Limiter les privilèges des utilisateurs, utiliser des mots de passe forts, et activer SSL/TLS pour les connexions.
- Maintenance : Exécuter régulièrement
OPTIMIZE TABLE,ANALYZE TABLE, etCHECK TABLEpour maintenir les performances.
Note : Ces bonnes pratiques sont générales. Adaptez-les toujours au contexte spécifique de votre application et à vos contraintes de performance.
Anti-patrons courants à éviter
- Sur-indexation : Trop d'index ralentit les écritures et augmente l'espace de stockage.
- Requêtes fragmentées : Éviter de faire plusieurs requêtes là où une seule jointure suffit.
- N + 1 : Éviter les boucles de requêtes dans le code applicatif qui chargent des dépendances ligne par ligne.
Exemple de requête optimisée
-- Au lieu de
SELECT * FROM users WHERE age > 21;
-- Faire
SELECT id, name, email FROM users WHERE age > 21 LIMIT 100;
Documentation générée pour l'utilisation avec des agents IA.