Maison > Article > base de données > La connexion entre les verrous MySQL et les index
Lorsque nous utilisons habituellement les verrous MySQL, nous considérons rarement l'efficacité des verrous lorsque nous sommes nouveaux dans les bases de données. En général, nous souhaitons uniquement atteindre l'objectif d'empêcher la concurrence. Cependant, à mesure que la quantité de données augmente, nous constaterons cela. il y en a beaucoup Nous avons écrit du SQL qui est très optimisé, mais parfois il est encore très lent et il est difficile d'en trouver la raison. À ce stade, nous devrions nous demander si cela est dû au verrouillage de MySQL.
Nous créons d'abord une nouvelle table de données :
Ici notre clé primaire est indexée par défaut ; ajoutez quelques données ici
Ensuite, nous ouvrons deux processus de test :
Ajoutez d'abord une condition Where qui n'implique pas de verrouillage d'index :
Ensuite on met à jour les données de cette ligne dans la deuxième fenêtre, on va On le trouve que cette opération sera bloquée,
Ensuite, lorsque nous soumettrons la transaction, nous trouverons les données de la deuxième fenêtre Il sera exécuté immédiatement.
D'après ce qui précède, il ne semble y avoir aucun problème. Cela atteint l'objectif que nous souhaitons, mais vous pouvez ajouter le même verrou et essayer de mettre à jour d'autres données, telles que. ce que j'ai exécuté ci-dessous Data :
J'ai testé les trois situations ci-dessus en utilisant le même processus. Elles seront toutes bloquées, donc le problème se pose. Nous verrouillons en fait name='test name'. Peut-être que nous venons juste de le faire. Nous voulons verrouiller les deux lignes id=133 et id=134. Nous ne voulons pas verrouiller 135, 136, 137, mais nous ne pouvons pas accéder à ces trois lignes car notre verrou est un verrou de table. en utilisant l'index :
L'index est utilisé lors de l'utilisation du verrou ci-dessus, mais nous sommes toujours bloqués lors de la mise à jour des données, ici nous sentirons que l'index est en fait aussi C'est ; inutile, mais si vous rencontrez le même verrou et utilisez l'index lors de la mise à jour des données, vous pouvez voir l'effet :
Nous constaterons que ce n'est pas verrouillé . Live, mis à jour directement ;
Ce qui suit est un résumé : si notre verrou utilise un index, c'est un verrou de ligne, s'il n'utilise pas d'index, c'est un verrou de table, mais le les données que nous exploitons doivent utiliser un verrou ;
Parlons de pourquoi c'est le cas :
Tout d'abord, nous savons que s'il n'y en a pas. index, nous l'utiliserons lors de la sélection ou du positionnement des données. Elle s'effectue sous la forme d'une analyse complète de la table, qui formera un verrou de table. S'il y a un index, il localisera directement la ligne spécifiée, qui formera un. verrouillage de ligne Cependant, sachez que lorsque vous mettez à jour les données, si vous n'utilisez pas l'index, l'ensemble de la table sera verrouillé. Lorsque la ligne verrouillée est analysée, elle sera également verrouillée, donc l'effet souhaité ne peut pas être obtenu. être atteint ;
Recommandations associées :
mécanisme de verrouillage mysql_MySQL
Verrouillage au niveau de la table d'utilisation du verrouillage MySQL
Comment optimiser le verrouillage 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!