ホームページ  >  に質問  >  本文

mysql の最適化 - mysql innodb と myisam ロック

innodb


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

マイサム


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

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

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

淡淡烟草味淡淡烟草味2729日前894

全員に返信(1)返信します

  • 大家讲道理

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

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

    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 は読み取りロックを追加するため、複数の < code >SELECT は同時実行できますが、UPDATE および DELETE と同時実行することはできません。

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

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

    で検索できます。 🎜

    返事
    0
  • キャンセル返事