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;
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?
谢邀。
InnoDB
InnoDB对
INSERT
可能只锁表头吧,总之不会锁全表的;UPDATE
(如果没有FOR UPDATE
或LOCK IN SHARE MODE
)和DELETE
在执行时会加写锁,有时就是锁全表,所以会影响并发性能,但这只是一瞬间的事,所以并发不高的情况下往往看不出来;一次
UPDATE
多行,肯定是多行一起锁,提交后一起释放的,因为MySQL要保证这条语句的原子性,当一条有主键冲突时,其他的也都不能提交了。MySQL
UPDATE
和DELETE
都会加写锁,而且锁全表;SELECT
会加读锁,所以多个SELECT
可以并发,但不能和UPDATE
、DELETE
并发;INSERT
的加锁有点特殊,锁的强度可能介于读锁和写锁之间,与SELECT
、INSERT
可以并发。最后,MyISAM就
SELECT
而言性能不会比InnoDB好很多,这还取决于行的存储方式,比如MyISAM的FIXED
可能会比DYNAMIC
快一些。另外,你的这个例子肯定会对InnoDB更有利些:如果改成一个非主键的索引,那么InnoDB未必会那么快;如果只SELECT id这一列,那么MyISAM未必这么慢。其中的道理可以搜一下聚集索引。