インサートはロックされますか?ロックされている場合、何の意味があるのでしょうか?
innodb での更新と削除は暗黙的に 排他ロック,
テーブル セットの更新... where id in (1,2,3,4); 排他ロックとは何ですか? これらを追加します4 つのレコードを直接、または ID に従って順番にロック、変更、コミットします;
削除と更新を行うと、暗黙的に書き込みロックが追加されますか?
select は暗黙的に読み取りロックを追加しますか?
これが 2 つの状況で追加され、両方ともテーブル ロック レベルである場合、同時実行性は特に悪くなります。
2 つのエンジンの選択
MyISAM: 大量の SELECT を実行する場合は、MyISAM の方が良い選択肢になります。これはなぜですか?実際に 360 万個のデータをテストしましたが、そのすべてでインデックス選択が使用されていました。Innodb の方がはるかに効率的です。
InnoDB: データで大量の INSERT または UPDATE が実行される場合は、InnoDB テーブルを使用する必要があります。これは myisam テーブル ロックが原因ですか?
お誘いありがとうございます。
InnoDB
InnoDB は
INSERT
のテーブル ヘッダーのみをロックしますが、テーブル全体はロックしませんINSERT
可能只锁表头吧,总之不会锁全表的;UPDATE
(如果没有FOR UPDATE
或LOCK IN SHARE MODE
)和DELETE
在执行时会加写锁,有时就是锁全表,所以会影响并发性能,但这只是一瞬间的事,所以并发不高的情况下往往看不出来;一次
UPDATE
UPDATE
(FOR UPDATE がない場合)
またはLOCK IN SHARE MODE
) とDELETE
は実行中に書き込みロックを追加し、場合によってはテーブル全体をロックするため、同時実行パフォーマンスに影響しますが、これは単なる一時的な問題なので、同時実行性が高くない場合は表示されないことがよくあります。MySQL はこれのアトミック性を確保する必要があるため、一度に複数のUPDATE
行をロックし、送信後に同時に解放する必要があります。ステートメントの 1 つに主キーの競合がある場合、他のステートメントは送信できません。MySQL
UPDATE
とDELETE
は書き込みロックを追加し、テーブル全体をロックします。UPDATE
和DELETE
都会加写锁,而且锁全表;SELECT
会加读锁,所以多个SELECT
可以并发,但不能和UPDATE
、DELETE
并发;INSERT
的加锁有点特殊,锁的强度可能介于读锁和写锁之间,与SELECT
、INSERT
SELECT
は読み取りロックを追加するため、複数の SELECT は同時実行できますが、UPDATE
およびDELETE
と同時実行することはできません。INSERT
のロックは少し特殊です。 、およびロックの強度。読み取りロックと書き込みロックの間にある場合があり、SELECT
およびINSERT
と同時に実行できます。SELECT
而言性能不会比InnoDB好很多,这还取决于行的存储方式,比如MyISAM的FIXED
可能会比DYNAMIC
ついに、MyISAM は高速になりました。 さらに、あなたの例は間違いなく InnoDB にとってより有益です。非主キーインデックスに変更された場合、ID 列のみが SELECT されている場合、InnoDB はそれほど高速ではない可能性があります。その理由はクラスター化インデックス