mysql の最適化 - mysql innodb と myisam ロック
淡淡烟草味
淡淡烟草味 2017-05-24 11:34:38
0
1
928

innodb


インサートはロックされますか?ロックされている場合、何の意味があるのでしょうか?
innodb での更新と削除は暗黙的に 排他ロック,
テーブル セットの更新... where id in (1,2,3,4); 排他ロックとは何ですか? これらを追加します4 つのレコードを直接、または ID に従って順番にロック、変更、コミットします;

マイサム


削除と更新を行うと、暗黙的に書き込みロックが追加されますか?
select は暗黙的に読み取りロックを追加しますか?
これが 2 つの状況で追加され、両方ともテーブル ロック レベルである場合、同時実行性は特に悪くなります。

2 つのエンジンの選択
MyISAM: 大量の SELECT を実行する場合は、MyISAM の方が良い選択肢になります。これはなぜですか?実際に 360 万個のデータをテストしましたが、そのすべてでインデックス選択が使用されていました。Innodb の方がはるかに効率的です。

InnoDB: データで大量の INSERT または UPDATE が実行される場合は、InnoDB テーブルを使用する必要があります。これは myisam テーブル ロックが原因ですか?

淡淡烟草味
淡淡烟草味

全員に返信(1)
大家讲道理

お誘いありがとうございます。

InnoDB
InnoDB は INSERT のテーブル ヘッダーのみをロックしますが、テーブル全体はロックしません INSERT可能只锁表头吧,总之不会锁全表的;
UPDATE(如果没有FOR UPDATELOCK IN SHARE MODE)和DELETE在执行时会加写锁,有时就是锁全表,所以会影响并发性能,但这只是一瞬间的事,所以并发不高的情况下往往看不出来;
一次UPDATEUPDATE (FOR UPDATE がない場合) または LOCK IN SHARE MODE) と DELETE は実行中に書き込みロックを追加し、場合によってはテーブル全体をロックするため、同時実行パフォーマンスに影響しますが、これは単なる一時的な問題なので、同時実行性が高くない場合は表示されないことがよくあります。MySQL はこれのアトミック性を確保する必要があるため、一度に複数の UPDATE 行をロックし、送信後に同時に解放する必要があります。ステートメントの 1 つに主キーの競合がある場合、他のステートメントは送信できません。

MySQL
UPDATEDELETE は書き込みロックを追加し、テーブル全体をロックします。 UPDATEDELETE都会加写锁,而且锁全表;
SELECT会加读锁,所以多个SELECT可以并发,但不能和UPDATEDELETE并发;
INSERT的加锁有点特殊,锁的强度可能介于读锁和写锁之间,与SELECTINSERTSELECT は読み取りロックを追加するため、複数の SELECT は同時実行できますが、UPDATE および DELETE と同時実行することはできません。

INSERT のロックは少し特殊です。 、およびロックの強度。読み取りロックと書き込みロックの間にある場合があり、SELECT および INSERT と同時に実行できます。

SELECT而言性能不会比InnoDB好很多,这还取决于行的存储方式,比如MyISAM的FIXED可能会比DYNAMICついに、MyISAM は
高速になりました。 さらに、あなたの例は間違いなく InnoDB にとってより有益です。非主キーインデックスに変更された場合、ID 列のみが SELECT されている場合、InnoDB はそれほど高速ではない可能性があります。その理由はクラスター化インデックス

で検索できます。 🎜
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート