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