Maison > Questions et réponses > le corps du texte
L'insert sera-t-il verrouillé ? S'il est verrouillé, à quoi ça sert ?
Dans innodb, la mise à jour et la suppression ajouteront implicitement verrou exclusif,
update table set... où id dans (1,2,3,4) ; le verrou exclusif est-il ajouté directement à ces quatre enregistrements, ou est-ce un verrou, modifier et valider selon l'ID ;
La suppression et la mise à jour ajouteront-elles implicitement des verrous en écriture ?
Select ajoutera implicitement un verrou en lecture ?
S'il est ajouté dans deux situations, les deux sont des niveaux de verrouillage de table, alors la concurrence sera particulièrement mauvaise, n'est-ce pas ?
Choix de deux moteurs
MyISAM : Si vous exécutez un grand nombre de SELECT, MyISAM est un meilleur choix. Pourquoi ? J'ai en fait testé 3,6 millions de données, qui ont toutes utilisé la sélection d'index. Innodb est beaucoup plus efficace.
InnoDB : Si vos données effectuent un grand nombre d'INSERT ou de UPDATE, vous devez utiliser une table InnoDB. Est-ce à cause du verrouillage de la table myisam ?
大家讲道理2017-05-24 11:36:38
Merci pour l'invitation.
InnoDB
InnoDB ne peut verrouiller l'en-tête de la table que pour INSERT
, mais il ne verrouillera pas la table entière ; INSERT
可能只锁表头吧,总之不会锁全表的;UPDATE
(如果没有FOR UPDATE
或LOCK IN SHARE MODE
)和DELETE
在执行时会加写锁,有时就是锁全表,所以会影响并发性能,但这只是一瞬间的事,所以并发不高的情况下往往看不出来;
一次UPDATE
多行,肯定是多行一起锁,提交后一起释放的,因为MySQL要保证这条语句的原子性,当一条有主键冲突时,其他的也都不能提交了。
MySQLUPDATE
和DELETE
都会加写锁,而且锁全表;SELECT
会加读锁,所以多个SELECT
可以并发,但不能和UPDATE
、DELETE
并发;INSERT
的加锁有点特殊,锁的强度可能介于读锁和写锁之间,与SELECT
、INSERT
可以并发。
最后,MyISAM就SELECT
而言性能不会比InnoDB好很多,这还取决于行的存储方式,比如MyISAM的FIXED
可能会比DYNAMIC
UPDATE
(s'il n'y a pas de FOR UPDATE ;
ou LOCK IN SHARE MODE
) et DELETE
ajouteront des verrous en écriture pendant l'exécution, verrouillant parfois la table entière, ce qui affectera les performances de concurrence, mais ce n'est que une question momentanée, donc elle n'est souvent pas visible lorsque la concurrence n'est pas élevée ;
Plusieurs lignes de UPDATE
doivent être verrouillées ensemble et publiées ensemble après la soumission, car MySQL doit garantir l'atomicité de cela ; Lorsqu'une clé primaire est en conflit, les autres ne peuvent pas être soumises.
UPDATE
et DELETE
ajouteront des verrous en écriture et verrouilleront la table entière ; 🎜SELECT
ajouteront des verrous en lecture, donc plusieurs SELECT
peut être concurrent, mais ne peut pas être concurrent avec UPDATE
et DELETE
🎜Le verrouillage de INSERT
est un peu spécial, et la force du verrou. Elle peut être comprise entre un verrou en lecture et un verrou en écriture, et peut être concurrent avec SELECT
et INSERT
. 🎜
🎜Enfin, les performances de MyISAM en termes de SELECT
ne seront pas bien meilleures que celles d'InnoDB. Cela dépend également de la façon dont les lignes sont stockées. Par exemple, le FIXED
de MyISAM peut être meilleur que celui d'InnoDB. DYNAMIQUE
Plus rapide. 🎜De plus, votre exemple sera certainement plus bénéfique pour InnoDB : s'il est remplacé par un index de clé non primaire, alors InnoDB n'est peut-être pas aussi rapide si seule la colonne id est SELECTED, alors MyISAM n'est peut-être pas si lent ; Vous pouvez rechercher la raison 🎜index clusterisé🎜. 🎜