Maison > base de données > tutoriel mysql > Comment puis-je exécuter des instructions SELECT dans MySQL sans provoquer de verrous ?

Comment puis-je exécuter des instructions SELECT dans MySQL sans provoquer de verrous ?

Barbara Streisand
Libérer: 2024-12-30 09:04:17
original
585 Les gens l'ont consulté

How Can I Execute SELECT Statements in MySQL Without Causing Locks?

Éviter les verrous avec les requêtes MySQL

Dans MySQL, certaines requêtes peuvent provoquer un verrouillage, entraînant des problèmes de performances, en particulier lorsque la table interrogée est fréquemment modifié. Pour résoudre ce problème, la question se pose : existe-t-il un moyen d'exécuter une instruction select sans induire de verrous ?

La requête d'origine en question :

SELECT COUNT(online.account_id) cnt from online;
Copier après la connexion

verrouille la table en raison de l'événement parallèle modifier également le tableau. La question explore les alternatives possibles.

Une solution potentielle mentionnée dans les réponses consiste à définir le niveau d'isolement des transactions sur READ-UNCOMMITTED. Cependant, cette approche n'est pas idéale pour les bases de données esclaves car elle est incompatible avec la journalisation binaire en mode STATEMENT.

Une approche alternative compatible avec les bases de données esclaves consiste à utiliser la syntaxe suivante :

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;
Copier après la connexion

Cette méthode désactive efficacement les verrous pendant la durée de l'instruction select. Cependant, il est important de noter que cela peut conduire à des résultats non déterministes.

Une autre suggestion consiste à utiliser la syntaxe suivante :

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
COMMIT ;
Copier après la connexion

Cette option désactive également les verrous pendant la durée de la select et garantit que les modifications apportées pendant la période d'isolement sont validées immédiatement. Il convient de noter que cette approche peut avoir des implications en termes de performances par rapport à la méthode précédente. De plus, il n'est pas nécessaire de redéfinir explicitement le niveau d'isolement sur REPEATABLE READ car il sera automatiquement réinitialisé lors de la validation.

En employant ces approches, il est possible d'éviter les verrous lors de l'exécution de requêtes de sélection dans MySQL, potentiellement améliorer les performances et réduire les conflits. Cependant, il est crucial de prendre en compte les compromis potentiels et les implications en termes d'exactitude et de cohérence des données lors du choix de la méthode appropriée.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal