recherche

Maison  >  Questions et réponses  >  le corps du texte

optimisation mysql - mysql innodb et myisam lock

innodb


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 ;

myisam


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 ?

淡淡烟草味淡淡烟草味2773 Il y a quelques jours929

répondre à tous(1)je répondrai

  • 大家讲道理

    大家讲道理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 UPDATELOCK IN SHARE MODE)和DELETE在执行时会加写锁,有时就是锁全表,所以会影响并发性能,但这只是一瞬间的事,所以并发不高的情况下往往看不出来;
    一次UPDATE多行,肯定是多行一起锁,提交后一起释放的,因为MySQL要保证这条语句的原子性,当一条有主键冲突时,其他的也都不能提交了。

    MySQL
    UPDATEDELETE都会加写锁,而且锁全表;
    SELECT会加读锁,所以多个SELECT可以并发,但不能和UPDATEDELETE并发;
    INSERT的加锁有点特殊,锁的强度可能介于读锁和写锁之间,与SELECTINSERT可以并发。

    最后,MyISAM就SELECT而言性能不会比InnoDB好很多,这还取决于行的存储方式,比如MyISAM的FIXED可能会比DYNAMICUPDATE (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.

    MySQL🎜🎜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é🎜. 🎜

    répondre
    0
  • Annulerrépondre