diff --git a/Seance3/preparation seance 3.txt b/Seance3/preparation seance 3.txt new file mode 100644 index 0000000000000000000000000000000000000000..f64938344d5557abf124cab86de0e0bbf1669403 --- /dev/null +++ b/Seance3/preparation seance 3.txt @@ -0,0 +1,64 @@ + +Partie 1 : mesurer les performances et utiliser des index + +1. Code pour mesurer le temps d'exécution + +<?php +$debut = microtime(true); +/** +* Suite d'instruction ... +*/ +$fin = microtime(true); + +$dureeExecution = $fin - $debut; + +echo "L'exécution de ce code a duré $dureeExecution secondes\n"; +?> + +2. Intérêt d'index : + +Les index sont utilisés pour rechercher rapidement des lignes avec des valeurs de +colonne spécifiques. Sans index, MySQL doit commencer par la première ligne, puis +parcourir toute la table pour trouver les lignes pertinentes. Plus la table est grande, +plus cela coûte. Si la table a un index pour les colonnes en question, MySQL peut +rapidement déterminer la position à rechercher au milieu du fichier de données sans avoir à +regarder toutes les données. Ceci est beaucoup plus rapide que la lecture séquentielle +de chaque ligne. + +Principe de fonctionnement : + +- Pour trouver rapidement les lignes correspondant à une clause WHERE. +- Pour éliminer les lignes de la considération. S'il y a un choix entre plusieurs index, MySQL + utilise normalement l'index qui trouve le plus petit nombre de lignes. +- Par exemple, si vous avez un index à trois colonnes sur (col1, col2, col3), vous avez + indexé les capacités de recherche sur (col1), (col1, col2) et (col1, col2, col3). +- Pour récupérer des lignes à partir d'autres tables lors de l'exécution de jointures. + MySQL peut utiliser les index des colonnes plus efficacement s'ils sont déclarés de même type + et de même taille. Dans ce contexte, VARCHAR et CHAR sont considérés comme identiques s'ils sont + déclarés comme ayant la même taille. Par exemple, VARCHAR (10) et CHAR (10) ont la même taille, + mais VARCHAR (10) et CHAR (15) ne le sont pas. +- Pour les comparaisons entre les colonnes de chaînes non binaires, les deux colonnes doivent + utiliser le même jeu de caractères. +- La comparaison de colonnes différentes peut empêcher l'utilisation d'index si les valeurs ne + peuvent pas être comparées directement sans conversion. Pour une valeur donnée telle que 1 dans la + colonne numérique, il peut être égal à n'importe quel nombre de valeurs dans la colonne chaîne comme + «1», «1», «00001» ou «01 .e1». Cela exclut l'utilisation de tout index pour la colonne de chaîne. +- Pour trouver la valeur MIN () ou MAX () pour une colonne indexée spécifique key_col. Ceci est + optimisé par un préprocesseur qui vérifie si vous utilisez WHERE key_part_N = constant sur toutes les + parties clés qui se produisent avant key_col dans l'index. Dans ce cas, MySQL effectue une recherche + de clé unique pour chaque expression MIN () ou MAX () et la remplace par une constante. Si toutes les + expressions sont remplacées par des constantes, la requête retourne immédiatement. + +Partie 2 : observer l'orm, améliorer les performances avec des chargements liés + +1. Structure du log de requêtes dans Eloquent + + + +2. Le problème des N+1 query + +Le problème est que chaque requête a un peu de surcharge. Il est beaucoup plus rapide d'émettre 1 requête +qui renvoie 100 résultats que d'émettre 100 requêtes qui renvoient chacune 1 résultat. Cela est + particulièrement vrai si votre base de données se trouve sur une machine différente qui est, disons, à 1-2 + ms du réseau. Dans ce cas, l'émission de 100 requêtes en série a un coût minimum de 100-200 ms, même si MySQL + peut les satisfaire instantanément. \ No newline at end of file