찾다

 >  Q&A  >  본문

mysql 최적화 - mysql innodb 및 myisam 잠금

innodb


삽입물이 잠기나요? 잠겨 있다면 무슨 의미가 있나요?
innodb 업데이트 및 삭제는 독점 잠금,
업데이트 테이블 세트를 암시적으로 추가합니다. 여기서 ID는 (1,2,3,4)에 독점 잠금이 직접 추가됩니까, 아니면 잠금입니까? ID에 따라 수정하고 커밋합니다.

미이삼


삭제 및 업데이트하면 암시적으로 쓰기 잠금이 추가되나요?
Select가 암시적으로 읽기 잠금을 추가합니까?
두 가지 상황에 추가하면 둘 다 테이블 잠금 수준이므로 동시성이 특히 나쁠 것 같죠?

두 엔진 중 선택
MyISAM: SELECT를 많이 실행한다면 MyISAM이 더 나은 선택인 이유는 무엇인가요? 실제로 360만 개의 데이터를 테스트했는데 모두 Innodb를 사용하는 것이 훨씬 효율적입니다.

InnoDB: 데이터가 INSERT 또는 UPDATE를 많이 수행하는 경우 InnoDB 테이블을 사용해야 합니다. myisam 테이블 잠금 때문인가요?

淡淡烟草味淡淡烟草味2773일 전936

모든 응답(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는 실행 중에 쓰기 잠금을 추가하고 때로는 전체 테이블을 잠그므로 동시성 성능에 영향을 주지만 이는 단지 일시적인 문제이므로 동시성이 높지 않으면 표시되지 않는 경우가 많습니다.

    한 번에 여러 행의 UPDATE를 함께 잠그고 제출 후에 함께 해제해야 합니다. 왜냐하면 MySQL은 이 항목의 원자성을 보장해야 하기 때문입니다. 하나의 기본 키가 충돌하면 다른 키를 제출할 수 없습니다.

    MySQL
    UPDATEDELETE都会加写锁,而且锁全表;
    SELECT会加读锁,所以多个SELECT可以并发,但不能和UPDATEDELETE并发;
    INSERT的加锁有点特殊,锁的强度可能介于读锁和写锁之间,与SELECTINSERTUPDATEDELETE는 쓰기 잠금을 추가하고 전체 테이블을 잠급니다.

    SELECT는 읽기 잠금을 추가하므로 < 코드가 여러 개 있습니다. >SELECT는 동시일 수 있지만 UPDATEDELETE와 동시일 수는 없습니다.

    INSERT의 잠금은 약간 특별합니다. 및 잠금 강도 읽기 잠금과 쓰기 잠금 사이에 있을 수 있으며 SELECTINSERT와 동시에 발생할 수 있습니다. SELECT而言性能不会比InnoDB好很多,这还取决于行的存储方式,比如MyISAM的FIXED可能会比DYNAMIC
    마지막으로 MyISAM이 더 빠릅니다. 또한 귀하의 예는 확실히 InnoDB에 더 도움이 될 것입니다. 기본 키가 아닌 인덱스로 변경되면 InnoDB가 그렇게 빠르지 않을 수 있습니다. id 열만 선택되면 MyISAM은 그다지 느리지 않을 수 있습니다.

    clustered index🎜 이유를 검색하실 수 있습니다. 🎜

    회신하다
    0
  • 취소회신하다