Mysql - utilisation et optimisation - 1 Les bases 2 Bien choisir son type de table 3 Bien choisir son type de champ 4 Optimiser sa base de donnée ...
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Mysql - utilisation et optimisation 1 Les bases 2 Bien choisir son type de table 3 Bien choisir son type de champ 4 Optimiser sa base de donnée 5 Notions avancées 6 Outils
1. Les Bases Selectionner des données Effectuer une jointure Enregistrer des logs Insert / update Les indexes
Séléctionner des données A bannir Select * from Plusieurs requêtes ORDER BY RAND LIMIT Stockage des images dans une table Les ouvertures / fermetures trop fréquente
Séléction des données A préconiser On spécifie les champs dont on a besoin On optimise les recherches, en les limitants les critères On utilise les jointures à bon escient On utilise le cache si possible On effectue toutes les requêtes d'une page avant de fermer la connection On utilise les indexs pour les grosses recherches
Les jointures A éviter Select ... from tbl1, tbl2 where tbl1.id = tbl2.ref Effectue une table temporaire de x*y lignes A préconiser Utilisation des jointures Left join: lorsque les valeurs de tbl2 sont dépendantes de tbl1 Right join: lorsque les valeurs de tbl1 sont dépendantes de tbl1 Inner join: semblable à tbl1,tbl2 Straight join: Permets de forcer l'ordre de lecture
Enregistrement de logs Choix du format de la table: ARCHIVES Pas de update/delete Select / insert uniquement LOW PRIORITY faible Enregistrement pas prioritaire A faire durant les moments ”calmes” Pas d'indexes
Insert / Update Toujours utiliser son index Si doute, utiliser ON DUPLICATE KEY UPDATE Ajouter DELAYED si l'enregistrement immédiat n'est pas nécessaire
Les indexs Optimise les recherches Placer des indexs sur les champs souvent utilisés Trop d'index tuent l'index! Pensez aux index multicolonne Index != clé primaire / secondaire
2. Choisir son type de table Généralité MyISAM Innodb Memory BDB ARCHIVE
Généralités Types de tables généralement utilisées: MyISAM Chaque code peut avoir son type de table Une base peut contenir plusieurs tables, en fonction des besoins Toujours penser sur le long terme
MyISAM Avantage Moteur de base, généralement utilisé Recherche en fulltext possible Gain de place Rapide Désavantage Pas de transaction (roll back, etc...) Pas de clés étrangère
Innodb Avantage Transactionnel (commit, rollback) Clé étrangère (intégrité référentiel) Gestion de gros volume de données Inconvénient Lenteur sur certaines requêtes (ex: select count(*))
Memory Avantages Très rapides (données en RAM) Inconvénient Perte des informations lors du redémarage du serveur Nécessite beaucoup de RAM Semblable à MyISAM Certaines limitations (text, auto increment, etc...)
BDB Avantage Mêmes avantages qu'Innodb Gère le crash serveur Inconvénient Identique à Innodb Indisponible sur certains OS (Windows p.e)
Archive Avantages Ecriture de logs bruts Prends peu d'espace Performance en écriture Inconvénient Limitation des requêtes Une seule utilité: logs
3. Choisir le type de donnée Généralité L'entier Bit Nombre réel Date / heure Chaîne de caractère Enum / set
Généralités Optimiser le choix du champs en fonction du besoin Ne pas utiliser de champs ”génériques” Texte lorsque la valeur < 255 caractères Int pour des rubriques Varcharr pour des dates Utiliser des équivalences optimisée La comparaison binaire est plus rapide que le '=' '=' est plus rapide que le LIKE
L'entier Plusieurs types d'entier disponibles TinyInt (8 bits => 128 → 121) SmallInt (16 bits => 32768 → 32767) MediumInt (24 bits) Int (32 bits) BigInt (64 bits) Inutile de spécifier la taille, pas pris en compte Si dépassement de la capacité => overflow
Le nombre réel FLOAT / DOUBLE Permets d'effectuer des arrondis en passant les bons paramètres FLOAT (nbr chiffre, nbr décimal) DECIMAL Utilisé pour les données monétaire, évite les erreurs d'arrondi
Le BIT Stockage valeur binaire 64 bits disponible MySQL 5.0.3 minimum Comparaison très rapide avec les opération binaire & (ex: 100101 & 100000 = 100000) XOR (ex: 101 XOR 110 = 011)
Date / heure DATE, DATETIME, TIME Permets d'entrer les dates au format ISO Permets d'effectuer des comparaisons MYSQL YEAR() => permets de sortir une année DAY() => permets de sortir un jour Etc... TIMESTAMP Stock le format de type entier Facilité de test et de transformation
Chaîne de caractère CHAR / VARCHAR Chaîne de donnée de taille spécifique (VAR) ou variable, de 1 à 255 caractères TEXT (16 bits) LONGTEXT (32 bits) Attention au jeux de caractères ! Permets d'utiliser LIKE %, mais diminution des performance!
ENUM / SET Permettent la gestion de liste par MySQL Gestion par PHP complex Pas compatibles autres BDD Evite d'avoir des données inconnues SET permets d'avoir 1 ou plusieurs valeurs ENUM n'autorise qu'une seule valeur Donnée stockée sous forme binaire
En conclusion... MySQL propose de nombreux champs, et de nombreuses fonctions Bien réfléchir au choix de ceuxci Eviter la généralité Augmenter la taille de stockage Diminue la rapidité et l'optimisation
4. Optimiser sa BdD Truc et astuce Optimiser ses recherches Clés Intégrité référentielle Index Vues
Truc et astuces Eviter les données redondante On privilégie les champs génériques aux énumération Pas de champs1, champs2, champs3, etc... Les requêtes les plus courantes doivent êtres les plus simples Faites attention à la nomenclature Répartir les données sur plusieurs tables de manière intelligentes
Optimiser ses recherches Limiter le nombres de résultats retourné Utiliser les indexs Eviter les recherches en full texte Les recherches binaires sont 10 à 1000x plus rapide qu'une recherche de champs texte distincts Utiliser des recherches en cache si possible Ajouter le maximum de critère possible
Clé primaire Donnée unique Donnée compacte Privilégier un nombre entier à une chaine variable Donnée réutilisée comme clé étrangère (secondaire) Définie comme index Ne doit jamais être NULL Le nom importe peu, mais doit être facilement reconnu (id, tableId, table_id, etc...)
Clé étrangère (secondaire) Permets de faire le lien entre plusieurs tables Type de champ identique à la clé primaire de référence (sinon forts ralentissements) Ne doit PAS être de type autoincrément Il est conseillé que le champ soit un index (augmente la vitesse de recherche)
Intégrité référentielle Disponible uniquement pour les tables InnoDB Evite d'avoir des données orpheline Oblige d'enregistrer / supprimer les données dans le bon ordre S'applique à 1 ou plusieurs tables N'empèche pas de faire un DROP table !!! Index obligatoire
Les index Accèlère l'accès aux données Ralentit les modifications (regénération de l'index) Index multichamps autorisé (si justifié!) Les index ne sont pas utilisés lors de tests ' != ' Les index ne sont pas utilisées sur LIKE '%...' A eviter sur des champs comportant peu de valeurs distincts (ex: true/false)
Les vues Identique à des tables virtuelles Est le résultat d'un select (généralement complex) Dispose des mêmes commande qu'une table ”standards” (Select, insert, update), sauf cas spéciaux Permets de travailler sur une table synthétisée et ”human readable”
5. Notions avancées Transaction Verrouillage Procédure stockée Triggers EXPLAIN
Les transactions Permets d'éxecuter plusieurs requête dans une même transaction Début par COMMIT et se termine par END Effectue un ROLLBACK complet en cas d'erreur Obéissent aux règles ACID Ex: START TRANSACTION; SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summary=@A WHERE type=1; COMMIT;
Le verroullage Plusieurs clients peuvent vouloir modifier un même enregistrement en même temps, par exemple Afin d'éviter un problème, on peut verrouiller: READ (permets de lire uniquement) READ LOCAL (lire + insert) WRITE (écriture possible par celui qui a verrouiller) LOW PRIORITY WRITE (idem à WRITE, mais attends qu'il n'y aie plus de READ)
Les procédures stockées Langage de programmation SQL sur le serveur Améliore les performance Diminue la redondance de code Améliorela sécurité des données Difficulté à porter en cas de changement de BdD
Les triggers Permettent l'exécution automatique de requètes SQL ou de procédure stockée après une modification INSERT UPDATE DELETE Peut diminuer les performances globales (lors de grosses modifications par ex: UPDATE ma_table set column = column + 1
EXPLAIN Retourne une table comportant les informations de l'éxecution de la requête SELECT Permettent l'optimisation Affiche les performance et l'indexation des colonnes Affiche l'organisation que MYSQL va effectuer
6. Outils Mysql, Mysqldump, Mysqladmin Mysql administrator, Mysql Query Browser PhpMyadmin
Mysql, Mysqldump & co Outils en ligne de commande Mysql: interpréteur de commande Par ex: Mysql u USER pPASSWORD h HOST NOM_TABLE < fichier_à_injecter.sql Mysqldump: Permets d'effectuer un dump (sauvegarde) en ligne de commande Par ex: mysqldump u USER P > save.sql Mysqladmin: outils d'administration en ligne de commande (changement du mot de passe del'admin, par exemple
Mysql Administrator Interface d'administration proposée par Mysql Permets d'effectuer des taches d'administration Permets de Gérer les services Gérer les utilisateurs, les tables, les droits Récupérer les logs Effectuer un backup Gérer la réplication Etc...
Mysql Query Browser Outils de requête proposé par MySQL Permets d'exécuter ses requètes(INSERT, UPDATE, etc...) Permets d'analyser les requètes (temps, tables ouvertes, etc...) Permets la saisie de procédures stockée.
phpMyAdmin Logiciel d'administration en PHP Utilisation courante A éviter pour de grosses requêtes Perte de la main sur SQL Risque de crash serveur Limité à la configuration PHP
Référence Choix du format des tables http://sonynoel.developpez.com/tutorials/mysql/moteurs/?page=sommaire MySQL 5, guide du développeur Eyrolles, ISBN 3827322537 Documentation officielle http://dev.mysql.com/doc/refman/5.0/fr/ Developpez.com http://mysql.developpez.com/
Question ? A vous de jouer
Vous pouvez aussi lire