Table des matières
Jointure simple en boucle imbriquée
show variables like '%join_buffer%'
Copier après la connexion
" >D'ailleurs, cette mémoire a un nom propre dans MySQL, appelé join buffer Nous pouvons exécuter l'instruction suivante pour. afficher la taille du tampon de jointure#🎜🎜 #
show variables like '%join_buffer%'
Copier après la connexion
Maison base de données tutoriel mysql Comment optimiser l'instruction de jointure dans MySQL

Comment optimiser l'instruction de jointure dans MySQL

Jun 03, 2023 am 09:31 AM
mysql join

Jointure simple en boucle imbriquée

Jetons un coup d'œil au fonctionnement de MySQL lors de l'exécution d'une opération de jointure. Quelles sont les méthodes de jointure courantes ?

Comment optimiser linstruction de jointure dans MySQL

Comme le montre l'image, lorsque nous effectuons l'opération de connexion, la table de gauche est Driven table , et la table de droite est # 🎜🎜#driven table

Simple Nested-Loop Join Cette opération de jointure consiste à prendre un enregistrement de la table pilote, puis à faire correspondre les enregistrements de la table pilotée tableau un par un. Si les conditions correspondent, le résultat sera renvoyé. Ensuite, continuez à faire correspondre l'enregistrement suivant dans la table des pilotes jusqu'à ce que toutes les données de la table des pilotes aient été mises en correspondance

Parce qu'il faut du temps pour récupérer les données de la table des pilotes à chaque fois , MySQL n'utilise pas Cet algorithme est utilisé pour effectuer des opérations de connexion Afin d'éviter de démarrer à partir du pilote à chaque fois, la récupération des données de la table prend du temps. Nous pouvons récupérer un lot de données de la table du pilote en une seule fois et effectuer des opérations de correspondance en mémoire. Une fois ce lot de données mis en correspondance, un lot de données est extrait de la table des pilotes et placé dans la mémoire jusqu'à ce que toutes les données de la table des pilotes correspondent.La récupération de données par lots peut réduire considérablement les E/S. opérations, donc l'efficacité d'exécution est relativement élevée, cette opération de connexion est également utilisée par MySQL

D'ailleurs, cette mémoire a un nom propre dans MySQL, appelé join buffer Nous pouvons exécuter l'instruction suivante pour. afficher la taille du tampon de jointure#🎜🎜 #
show variables like '%join_buffer%'
Copier après la connexion

Comment optimiser linstruction de jointure dans MySQL

Sortez la table single_table que nous avons utilisée auparavant, créez 2 tables basées sur la table single_table et insérez 1w aléatoire enregistrements dans chaque table

CREATE TABLE single_table (
    id INT NOT NULL AUTO_INCREMENT,
    key1 VARCHAR(100),
    key2 INT,
    key3 VARCHAR(100),
    key_part1 VARCHAR(100),
    key_part2 VARCHAR(100),
    key_part3 VARCHAR(100),
    common_field VARCHAR(100),
    PRIMARY KEY (id),
    KEY idx_key1 (key1),
    UNIQUE KEY idx_key2 (key2),
    KEY idx_key3 (key3),
    KEY idx_key_part(key_part1, key_part2, key_part3)
) Engine=InnoDB CHARSET=utf8;

create table t1 like single_table;
create table t2 like single_table;
Copier après la connexion
# 🎜🎜#Si vous utilisez directement l'instruction de jointure, l'optimiseur MySQL peut sélectionner la table t1 ou t2 comme table pilote, ce qui affectera notre processus d'analyse de l'instruction SQL, nous utilisons donc Straight_join pour permettre à mysql d'utiliser une méthode de connexion fixe pour exécuter la requête

select * from t1 straight_join t2 on (t1.common_field = t2.common_field)
Copier après la connexion

Le temps d'exécution est de 0,035s

Comment optimiser linstruction de jointure dans MySQLLe plan d'exécution est le suivant

# 🎜🎜# J'ai vu Using join buffer dans la colonne Extra, indiquant que l'opération de connexion est basée sur

Block Nested-Loop Join

algorithme

Index Nested-Loop JoinComment optimiser linstruction de jointure dans MySQL# 🎜🎜#Après avoir compris l'algorithme

Block Nested-Loop Join

, vous pouvez voir que chaque enregistrement dans la table pilote fera correspondre tous les enregistrements de la table pilotée. Cela prend-il beaucoup de temps. Peut-il être amélioré. Qu'en est-il de l'efficacité de la correspondance des tables pilotées ?

Je suppose que vous avez aussi pensé à cet algorithme, qui consiste à ajouter des index aux colonnes connectées par la table pilotée, afin que le processus de correspondance soit très rapide, comme le montre l'image Comment optimiser linstruction de jointure dans MySQL

# 🎜🎜#

Voyons à quelle vitesse il est nécessaire d'effectuer des requêtes basées sur des jointures basées sur des colonnes d'index ?

select * from t1 straight_join t2 on (t1.id = t2.id)
Copier après la connexion
Le temps d'exécution est de 0,001 seconde, ce qui peut être considéré comme plus d'un niveau plus rapide que la connexion basée sur des colonnes ordinaires

# 🎜🎜# Le plan d'exécution est le suivant

Comment optimiser linstruction de jointure dans MySQLToutes les colonnes des enregistrements de la table pilote ne seront pas placées dans le tampon de jointure, seulement les colonnes dans la liste de requêtes et le filtrage Seules les colonnes de la condition seront placées dans le tampon de jointure, nous n'utilisons donc pas * comme liste de requêtes, nous avons seulement besoin de mettre les colonnes qui nous intéressent dans la liste de requêtes, donc que plus d'enregistrements peuvent être placés dans le tampon de jointure#🎜🎜 #

Comment choisir la table des pilotes ?

Maintenant que nous connaissons l'implémentation spécifique de join, parlons d'une question courante, à savoir, comment choisir la table des pilotes ?

Comment optimiser linstruction de jointure dans MySQLS'il s'agit de l'algorithme Block Nested-Loop Join :

Comment optimiser linstruction de jointure dans MySQLLorsque le tampon de jointure est suffisamment grand, qui le fait ? La table pilote n'a aucun impact

Lorsque le tampon de jointure n'est pas assez grand, vous devez choisir une petite table comme table pilote (la petite table a moins de données et le nombre de fois où elles sont placées dans le tampon de jointure est petit, ce qui réduit le nombre d'analyses de la table)

Si c'est le cas un algorithme de jointure à boucle imbriquée d'index

On suppose que les lignes de la table de pilotage Le nombre est M, donc M lignes de la table de pilotage doivent être numérisées

# 🎜🎜#Chaque fois qu'une ligne de données est obtenue à partir de la table pilotée, l'index a doit d'abord être recherché, puis l'index de clé primaire est recherché. Le nombre de lignes dans la table pilotée est N. La complexité approximative de la recherche d'un arbre à chaque fois est le logarithme de base 2 N, donc la complexité temporelle de la recherche d'une ligne sur la table pilotée est de 2 ∗ #Chaque ligne de données de la table pilotée doit être recherchée une fois dans la table pilotée. La complexité approximative de l'ensemble du processus d'exécution est M + M ∗ 2∗log2N
  • Évidemment, M a un plus grand impact sur le nombre de lignes numérisées, donc une petite table doit être utilisée comme table de conduite. Bien entendu, la prémisse de cette conclusion est que l'index de la table pilotée peut être utilisé

  • En bref, nous pouvons laisser la petite table être la table pilote

    Lorsque l'instruction de jointure est exécutée lentement, nous pouvons l'optimiser grâce aux méthodes suivantes

    • Lors de l'exécution de l'opération de jointure, la table pilotée peut être utilisé Index

    • Utiliser une petite table comme table pilote

    • Augmenter la taille du tampon de jointure

    • Ne pas utiliser * comme liste de requêtes, renvoyer uniquement les colonnes requises

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment ouvrir phpmyadmin Comment ouvrir phpmyadmin Apr 10, 2025 pm 10:51 PM

Vous pouvez ouvrir PHPMYADMIN via les étapes suivantes: 1. Connectez-vous au panneau de configuration du site Web; 2. Trouvez et cliquez sur l'icône PHPMYADMIN; 3. Entrez les informations d'identification MySQL; 4. Cliquez sur "Connexion".

MySQL: une introduction à la base de données la plus populaire au monde MySQL: une introduction à la base de données la plus populaire au monde Apr 12, 2025 am 12:18 AM

MySQL est un système de gestion de la base de données relationnel open source, principalement utilisé pour stocker et récupérer les données rapidement et de manière fiable. Son principe de travail comprend les demandes des clients, la résolution de requête, l'exécution des requêtes et les résultats de retour. Des exemples d'utilisation comprennent la création de tables, l'insertion et la question des données et les fonctionnalités avancées telles que les opérations de jointure. Les erreurs communes impliquent la syntaxe SQL, les types de données et les autorisations, et les suggestions d'optimisation incluent l'utilisation d'index, les requêtes optimisées et la partition de tables.

Comment utiliser un seul fileté redis Comment utiliser un seul fileté redis Apr 10, 2025 pm 07:12 PM

Redis utilise une architecture filetée unique pour fournir des performances élevées, une simplicité et une cohérence. Il utilise le multiplexage d'E / S, les boucles d'événements, les E / S non bloquantes et la mémoire partagée pour améliorer la concurrence, mais avec des limites de limitations de concurrence, un point d'échec unique et inadapté aux charges de travail à forte intensité d'écriture.

Place de MySQL: bases de données et programmation Place de MySQL: bases de données et programmation Apr 13, 2025 am 12:18 AM

La position de MySQL dans les bases de données et la programmation est très importante. Il s'agit d'un système de gestion de base de données relationnel open source qui est largement utilisé dans divers scénarios d'application. 1) MySQL fournit des fonctions efficaces de stockage de données, d'organisation et de récupération, en prenant en charge les systèmes Web, mobiles et de niveau d'entreprise. 2) Il utilise une architecture client-serveur, prend en charge plusieurs moteurs de stockage et optimisation d'index. 3) Les usages de base incluent la création de tables et l'insertion de données, et les usages avancés impliquent des jointures multiples et des requêtes complexes. 4) Des questions fréquemment posées telles que les erreurs de syntaxe SQL et les problèmes de performances peuvent être déboguées via la commande Explication et le journal de requête lente. 5) Les méthodes d'optimisation des performances comprennent l'utilisation rationnelle des indices, la requête optimisée et l'utilisation des caches. Les meilleures pratiques incluent l'utilisation des transactions et des acteurs préparés

Pourquoi utiliser MySQL? Avantages et avantages Pourquoi utiliser MySQL? Avantages et avantages Apr 12, 2025 am 12:17 AM

MySQL est choisi pour ses performances, sa fiabilité, sa facilité d'utilisation et son soutien communautaire. 1.MySQL fournit des fonctions de stockage et de récupération de données efficaces, prenant en charge plusieurs types de données et opérations de requête avancées. 2. Adoptez l'architecture client-serveur et plusieurs moteurs de stockage pour prendre en charge l'optimisation des transactions et des requêtes. 3. Facile à utiliser, prend en charge une variété de systèmes d'exploitation et de langages de programmation. 4. Avoir un solide soutien communautaire et fournir des ressources et des solutions riches.

Comment se connecter à la base de données d'Apache Comment se connecter à la base de données d'Apache Apr 13, 2025 pm 01:03 PM

Apache se connecte à une base de données nécessite les étapes suivantes: Installez le pilote de base de données. Configurez le fichier web.xml pour créer un pool de connexion. Créez une source de données JDBC et spécifiez les paramètres de connexion. Utilisez l'API JDBC pour accéder à la base de données à partir du code Java, y compris l'obtention de connexions, la création d'instructions, les paramètres de liaison, l'exécution de requêtes ou de mises à jour et de traitement des résultats.

Comment afficher l'erreur de base de données SQL Comment afficher l'erreur de base de données SQL Apr 10, 2025 pm 12:09 PM

Les méthodes de visualisation des erreurs de base de données SQL sont: 1. Afficher directement les messages d'erreur; 2. Utilisez des erreurs d'affichage et des commandes d'avertissement Show; 3. Accédez au journal d'erreur; 4. Utiliser les codes d'erreur pour trouver la cause de l'erreur; 5. Vérifiez la connexion de la base de données et la syntaxe de requête; 6. Utilisez des outils de débogage.

Moniteur Disd Droplet avec service d'exportateur Redis Moniteur Disd Droplet avec service d'exportateur Redis Apr 10, 2025 pm 01:36 PM

La surveillance efficace des bases de données Redis est essentielle pour maintenir des performances optimales, identifier les goulots d'étranglement potentiels et assurer la fiabilité globale du système. Le service Redis Exporter est un utilitaire puissant conçu pour surveiller les bases de données Redis à l'aide de Prometheus. Ce didacticiel vous guidera à travers la configuration et la configuration complètes du service Redis Exportateur, en vous garantissant de créer des solutions de surveillance de manière transparente. En étudiant ce tutoriel, vous réaliserez les paramètres de surveillance entièrement opérationnels

See all articles