Maison >base de données >tutoriel mysql >Qu'est-ce que le tri de fichiers dans MySQL
Dans MySQL, le tri de fichiers fait référence au tri de fichiers, qui trie les données obtenues en mémoire via l'algorithme de tri correspondant. Il existe deux types de tri de fichiers : 1. Le tri bidirectionnel, qui extrait d'abord le champ de tri correspondant et les informations du pointeur de ligne qui peuvent localiser directement les données de ligne selon les conditions correspondantes, puis les trie dans le tampon de tri 2 ; . Tri unidirectionnel, qui est un tri unique Supprimez tous les champs des lignes qui remplissent la condition, puis triez-les dans le tampon de tri.
L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3.
Il existe deux méthodes d'implémentation de tri pour ORDER BY dans MySQL :
1 Utilisez un index ordonné pour obtenir des données ordonnées
2 Tri de fichiers (filesort)
Analysez la requête dans expliquer lors de l'utilisation d'un. index ordonné pour obtenir des données ordonnées, il affiche Using index et le tri des fichiers affiche Using filesort.
Seulement si toutes les colonnes de ORDER BY doivent être incluses dans le même index, et que l'ordre de l'index est exactement le même que l'ordre dans la clause order by, et le sens de tri (ascendant ou décroissant) de toutes les colonnes sont les mêmes (le mélange du mode ASC et du mode DESC n'utilise pas d'index)
où la combinaison instruction et ordre par instruction satisfait le préfixe le plus à gauche
Dans les autres cas, utilisez le tri de fichiers comme suit :
1) L'instruction Where et l'instruction order by utilisent des index différents. 2) Le nombre de lignes vérifiées est trop important et aucun index de couverture n'est utilisé 3) Les colonnes de ORDER BY ne sont pas incluses dans. le même index. C'est-à-dire que des index différents sont utilisés. 4) ASC et DESC sont utilisés pour les colonnes d'index en même temps. 5) Les expressions sont utilisées dans les colonnes d'index dans les instructions Where ou ORDER BY, y compris les expressions de fonction.
6) La combinaison de l'instruction Where et de l'instruction ORDER BY satisfait le préfixe le plus à gauche, mais ce qui est recherché dans l'instruction Where est la plage.
filesort
Ce tri de fichiers ne signifie pas trier les fichiers du disque, mais nous indique simplement qu'une opération de tri a été effectuée. C'est-à-dire que le plan d'exécution donné par MySQL Query Optimizer (affiché via la commande EXPLAIN) est appelé tri de fichiers. Le tri de fichiers consiste à trier les données obtenues en mémoire via l'algorithme de tri correspondant : MySQL doit trier Les données sont triées en mémoire, et la zone mémoire utilisée est la zone de tri définie par la variable système sort_buffer_size. Cette zone de tri est exclusive à chaque thread, il peut donc y avoir plusieurs zones de mémoire tampon de tri dans MySQL en même temps. le tri de fichiers est divisé en deux types
Tri bidirectionnel
: Tout d'abord, le champ de tri correspondant et les informations du pointeur de ligne qui peuvent localiser directement les données de ligne sont extraits selon les conditions correspondantes, puis triés dans le tampon de tri. Après le tri, le champ de requête est supprimé en fonction du pointeur de ligne et les E/S disque sont exécutées deux fois.
MySQL détermine principalement quel algorithme de tri doit être utilisé en comparant la taille du paramètre système max_length_for_sort_data que nous avons défini et la somme des tailles de type de champ supprimées par l'instruction Query. Si max_length_for_sort_data est plus grand, le deuxième algorithme optimisé est utilisé, sinon le premier algorithme est utilisé. Donc, si vous souhaitez que l'efficacité de l'opération ORDER BY soit aussi élevée que possible, vous devez faire attention au réglage du paramètre max_length_for_sort_data. La base de données d'un collègue a déjà connu un grand nombre d'attentes de tri, entraînant une charge système élevée et un temps de réponse long. Finalement, il a été constaté que c'était parce que MySQL utilisait le premier algorithme de tri traditionnel. Après avoir augmenté max_length_for_sort_data Après avoir modifié la valeur du paramètre, le système a utilisé le premier algorithme de tri traditionnel. la charge a été immédiatement grandement soulagée et la réponse a été beaucoup plus rapide.
Si la clause order by fait uniquement référence à la première table de la jointure, MySQL triera d'abord la première table, puis la joindra. Autrement dit, l'utilisation de Filesort de Extra dans expain. Sinon, MySQL enregistre d'abord les résultats dans la table temporaire (Table temporaire), puis trie les données dans la table temporaire. À ce stade, l'Extra dans expain affiche Utilisation de Filesort temporaire. .
【Recommandations associées : tutoriel vidéo mysql】
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!