Haute performance Chapitre VI optimisation MySQL-performances de la requête (1)

D'une manière générale, le cycle de vie d'une requête peut être à peu près dans l'ordre de vue: du client au serveur, puis analyser sur le serveur, plan d'exécution, d'exécution et renvoie les résultats au client.

Trois indicateurs pour MySQL, la mesure la plus simple du coût d'une requête comme suit:
Temps de réponse
Le nombre de lignes balayées
Nombre de lignes retournées
L'exécution de la requête sous-jacente:
Le client envoie une requête au serveur.
Le serveur vérifie d'abord le cache de requête si un cache frappé, puis revenez immédiatement les résultats stockés dans le cache. Sinon, passez à l'étape suivante.
Analyse SQL côté serveur, le prétraitement, et ensuite le plan d'exécution correspondant généré par l'optimiseur.
Selon le plan de mise en œuvre MySQL généré par l'optimiseur, l'API du moteur de stockage appelle pour exécuter la requête.
Les résultats sont renvoyés au client.
Vérifier l'état:
Sommeil: le fil est en attente pour le client d'envoyer une nouvelle demande.
Question: thread exécute une requête ou envoie les résultats au client.
Verrouillé: Dans la couche serveur MySQL, le thread attend un verrou de table.
L'analyse et les statistiques: le fil est de collecter le moteur de stockage d'informations statistiques, et à générer un plan d'exécution de la requête.
Copie à tmp table [sur le disque]: le thread exécute une requête, et le jeu de résultats sont copiés sur une table temporaire, cet état est généralement soit faire GROUP BY, soit les opérations de tri des fichiers ou des opérations UNION. Si cet état là-bas marque « sur disque », cela signifie que MySQL est une table temporaire en mémoire sur le disque.
Tri résultat: le fil est de trier le jeu de résultats.
Envoi de données: Cela représente une variété de situations: fil peut transférer des données entre une pluralité d'états ou de générer un jeu de résultats, ou les données renvoyées au client.
MySQL Il y a deux algorithmes de tri:
commande deux transmissions (ancienne version):
Lire champ pointeur de ligne et besoin de trier, de les trier, puis lire la ligne de données en fonction du résultat de tri souhaité.
Transfert aller Trier (nouvelle version):
Tout d'abord lire toutes les colonnes nécessaires à la requête, puis triée selon la colonne donnée, et enfin directement retourné pour trier les résultats.
optimiseur de requêtes Astuce (indice):
HIGH_PRIORITY de la LOW_PRIORITY
Cette touche indique à MySQL, lorsque plusieurs déclarations accès simultanément une table particulière, dont la priorité déclarations sont une priorité relativement élevée qui la déclaration est relativement faible.
Lorsque HIGH_PRIORITY pour les instructions SELECT, MySQL sera reprogrammée à la table jusqu'à ce que tous attendent le verrou pour modifier les données dans cette déclaration instruction SELECT. HIGH_PRIORITY peut également être utilisé pour l'instruction INSERT, l'effet est tout simplement de compenser l'impact de la déclaration globale des paramètres LOW_PRIORITY.
LOW_PRIORITY est tout le contraire: elle fait la déclaration a été dans un état d'attente, il y a de longues files d'attente doivent avoir accès à la même déclaration d'une table ---- même ceux qui déclaration que la déclaration a également soumis ultérieurement au serveur.
Les deux idées ne sont valables que pour l'utilisation du moteur de stockage de verrouillage de la table.
DIFFÉRÉ
Cette astuce est valable pour INSERT et REPLACE. MySQL utilisera les déclarations de déclaration invite immédiatement au client, et placé dans les lignes insérées dans la mémoire tampon, et écrit ensuite les données dans le tableau de commandes est inactif.
STRAIGHT_JOIN
Après cette astuce peut être placé dans l'instruction SELECT mot-clé SELECT, il peut également être placé entre un tableau associé deux noms. La première consiste à utiliser toutes les tables dans la requête associée à l'ordre dans lequel ils apparaissent dans la déclaration. La seconde règle est associée à une séquence fixe avant et après les deux tableaux.
SQL_SMALL_RESULT 和 SQL_BIG_RESULT
Ces deux idées ne sont valables que pour les commandes SELECT. Ils disent l'optimiseur GROUP BY ou requête DISTINCT comment utiliser une table temporaire et trier. SQL_SMALL_RESULT indiquer à l'optimiseur que le résultat est très petit rallye, le jeu de résultats peut être placé dans la mémoire temporaire dans la table d'index pour éviter une opération de tri. Si SQL_BIG_RESULT, puis dire à l'optimiseur que le jeu de résultats peut être très grand, il est recommandé d'utiliser une table temporaire pour effectuer des opérations de tri de disque.
SQL_BUFFER_RESULT
Cet indicateur indique l'optimiseur met les résultats de la requête dans une table temporaire, puis déverrouiller les tables aussi vite que possible.
SQL_CACHE somme SQL_NO_CACHE
Cet indicateur indique le jeu de résultats MySQL si cela doit être mis en cache dans le cache de requête.
SQL_CALC_FOUND_ROWS
Il fera retourne MySQL le jeu de résultats contient plus d'informations. requête MySQL ainsi que le retrait rapide du total seront calculés après la clause LIMIT de l'ensemble des résultats de la requête à retourner, mais en fait que le retour d'un jeu de résultats de valeur limite. Cette valeur peut être obtenue par une fonction FOUND_ROW ().
FOR UPDATE 和 LOCK IN SHARE MODE
Cela a incité deux grands mécanisme de commande de verrouillage de l'instruction SELECT, mais seulement efficace pour atteindre la ligne au niveau du moteur de stockage de verrouillage. Utilisez les conseils correspondent aux lignes de verrouillage de la requête.
USE INDEX, IGNORE INDEX 和 FORCE INDEX
Ces conseils indiquer à l'optimiseur d'utiliser ou qui n'utilise pas d'index pour enregistrer la requête.
Dans MySQL5.0 et plus tard, ajouter quelques-uns des paramètres utilisés pour contrôler le comportement de l'optimiseur:
optimizer_search_depth
Ce paramètre limitent l'optimiseur dans le plan de mise en œuvre exhaustive.
optimizer_prune_level
Ce paramètre est activé par défaut, ce qui rend l'optimiseur décidera de sauter une partie du plan de mise en œuvre en fonction du nombre de lignes à analyser.
optimizer_switch
Cette variable contient un certain nombre de / désactiver les caractéristiques de l'optimiseur de drapeau.

Je suppose que tu aimes

Origine www.cnblogs.com/zhishuiyushi/p/12444482.html
conseillé
Classement