MySQL peut être subdivisé en verrous de ligne, verrous de page et verrous de table en fonction de la granularité des verrous.
Verrouillage de ligne
1. La granularité de verrouillage du verrouillage de ligne est la meilleure de MySQL. Elle est appliquée au moteur de stockage InnoDB et ajoute uniquement la ligne actuelle du. opération de verrouillage. Dans le cas de la concurrence, la probabilité d'attente de verrouillage est faible et un plus grand nombre de concurrences est pris en charge, mais la surcharge est élevée, le verrouillage est lent et des blocages peuvent se produire.
2. Il y a un prérequis pour utiliser les verrous de ligne dans InnoDB : l'indexation est requise lors de la récupération des données ! Parce qu'InnoDB implémente les verrous de ligne en verrouillant les entrées d'index de l'index.
3. Lors d'une requête sans conditions d'index, InnoDB utilisera des verrous de table, ce qui peut entraîner un grand nombre de conflits de verrouillage lorsque la concurrence est importante. De plus, les verrous de ligne sont verrouillés sur l'index. Dans ce cas, même si différents enregistrements sont accédés, mais que le même élément d'index est utilisé, des conflits de verrouillage peuvent également survenir.
Astuce : les verrous de ligne ne peuvent pas nécessairement être utilisés si la récupération d'index est utilisée, les verrous de table peuvent également être utilisés. Étant donné que MySQL compare les coûts des différents plans d'exécution, InnoDB utilise des verrous de table lorsqu'une analyse complète de la table est plus efficace qu'un index. Il est donc nécessaire d’analyser les conflits de verrouillage en conjonction avec le plan d’exécution SQL.
4. Les verrous de ligne provoqueront des blocages, car dans les verrous de ligne, le verrou est obtenu progressivement, qui est principalement divisé en deux étapes : le verrouillage de l'index de clé primaire et le verrouillage de l'index de clé non primaire. Par exemple : lorsque deux transactions sont exécutées en même temps, l'une verrouille l'index de clé primaire et attend les autres index ; l'autre verrouille l'index de clé non primaire et attend l'index de clé primaire. Une impasse se produira. InnoDB peut généralement détecter ce type de blocage et faire en sorte qu'une transaction libère le verrou et annule, et qu'une autre acquière le verrou pour terminer la transaction.
Verrouillage de table
La granularité de verrouillage du verrouillage de table est la plus grossière de MySQL. Elle est appliquée dans les moteurs InnoDB et MyISAM et verrouille toute la table actuelle. Il ne convient pas aux scénarios à forte concurrence, mais il présente une faible surcharge, un verrouillage rapide, aucun blocage et la probabilité la plus élevée de conflit de verrouillage.
Verrouillage de page
La granularité du verrouillage de page se situe entre le verrouillage de ligne et le verrouillage de table. Elle est appliquée au moteur BDB. La concurrence est moyenne, et le coût et la vitesse de verrouillage le sont également. entre le verrouillage de ligne et le verrouillage de table.
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!