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 ...

La page est créée Éric Duval
 
CONTINUER À LIRE
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 ...
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 multi­colonne
   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 full­text 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 ceux­ci
   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 auto­incré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 multi­champs 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://sony­noel.developpez.com/tutorials/mysql/moteurs/?page=sommaire

   MySQL 5, guide du développeur
       Eyrolles, ISBN 3­82732253­7
   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