Heim  >  Fragen und Antworten  >  Hauptteil

MySQL-Optimierung – MySQL-Innodb und Myisam-Sperre

innodb


Wird der Einsatz gesperrt? Wenn es verschlossen ist, welchen Sinn hat es dann?
In innodb wird durch Aktualisieren und Löschen implizit exklusive Sperre,
Tabellensatz hinzufügen ... hinzugefügt, wobei die ID in (1,2,3,4) direkt zu diesen vier Datensätzen hinzugefügt wird oder es sich um eine Sperre handelt. entsprechend der ID ändern und festschreiben;

myisam


Fügen Löschungen und Aktualisierungen implizit Schreibsperren hinzu?
Select wird implizit eine Lesesperre hinzugefügt?
Wenn es in zwei Situationen hinzugefügt wird, beide sind Tabellensperrstufen, dann ist die Parallelität besonders schlecht, oder?

Auswahl zwischen zwei Engines
MyISAM: Wenn Sie eine große Anzahl von SELECTs ausführen, ist MyISAM die bessere Wahl. Ich habe tatsächlich 3,6 Millionen Daten getestet, bei denen die Indexauswahl viel effizienter ist.

InnoDB: Wenn Ihre Daten viele INSERT- oder UPDATE-Operationen durchführen, sollten Sie eine InnoDB-Tabelle verwenden. Liegt das an der Myisam-Tabellensperre?

淡淡烟草味淡淡烟草味2682 Tage vor848

Antworte allen(1)Ich werde antworten

  • 大家讲道理

    大家讲道理2017-05-24 11:36:38

    谢邀。

    InnoDB
    InnoDB对INSERT可能只锁表头吧,总之不会锁全表的;
    UPDATE(如果没有FOR UPDATELOCK IN SHARE MODE)和DELETE在执行时会加写锁,有时就是锁全表,所以会影响并发性能,但这只是一瞬间的事,所以并发不高的情况下往往看不出来;
    一次UPDATE多行,肯定是多行一起锁,提交后一起释放的,因为MySQL要保证这条语句的原子性,当一条有主键冲突时,其他的也都不能提交了。

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

    最后,MyISAM就SELECT而言性能不会比InnoDB好很多,这还取决于行的存储方式,比如MyISAM的FIXED可能会比DYNAMIC快一些。
    另外,你的这个例子肯定会对InnoDB更有利些:如果改成一个非主键的索引,那么InnoDB未必会那么快;如果只SELECT id这一列,那么MyISAM未必这么慢。其中的道理可以搜一下聚集索引

    Antwort
    0
  • StornierenAntwort