집 >데이터 베이스 >MySQL 튜토리얼 >mysql에서 innodb와 myisam의 차이점은 무엇입니까?
차이점: 1. MyISAM은 트랜잭션을 지원하지 않지만 InnoDB는 지원합니다. 2. InnoDB는 데이터 행 잠금을 지원하는 반면 MyISAM은 행 잠금을 지원하지 않고 전체 테이블 잠금만 지원합니다. 3. InnoDB는 외래 키를 지원하지만 MyISAM은 지원하지 않습니다. 4. InnoDB의 기본 키 범위는 MyISAM보다 최대 2배 더 넓습니다.
MyISAM과 InnoDB의 차이점
MySQL은 기본적으로 MyISAM을 사용합니다.
MyISAM은 트랜잭션을 지원하지 않지만 InnoDB는 지원합니다. InnoDB의 AUTOCOMMIT은 기본적으로 켜져 있습니다. 즉, 각 SQL 문은 기본적으로 트랜잭션으로 캡슐화되고 자동으로 제출됩니다. 이는 속도에 영향을 미치므로 트랜잭션을 형성하기 위해 시작과 커밋 사이에 여러 SQL 문을 표시하는 것이 가장 좋습니다. 가서 제출하세요.
InnoDB는 데이터 행 잠금을 지원하는 반면 MyISAM은 행 잠금을 지원하지 않고 전체 테이블 잠금만 지원합니다. 즉, 동일한 MyISAM 테이블에 대한 읽기 잠금과 쓰기 잠금은 상호 배타적입니다. MyISAM이 동시에 읽고 쓸 때 대기 큐에 읽기 요청과 쓰기 요청이 모두 있으면 기본적으로 쓰기 요청의 우선 순위가 더 높습니다. 읽기 요청이 먼저 도착하면 쿼리 프로세스가 오랫동안 차단되므로 MyISAM은 많은 쿼리와 수정이 공존하는 상황에는 적합하지 않습니다. MyISAM은 잠금 테이블이기 때문에 시간이 많이 걸리는 읽기 작업으로 인해 다른 쓰기 프로세스가 중단됩니다.
InnoDB는 외래 키를 지원하지만 MyISAM은 지원하지 않습니다.
InnoDB의 기본 키 범위는 MyISAM보다 최대 2배 더 넓습니다.
InnoDB는 전체 텍스트 인덱싱을 지원하지 않지만 MyISAM은 지원합니다. 전체 텍스트 인덱싱은 char, varchar 및 text(불용 단어 제외)의 각 단어에 대해 역정렬된 인덱스를 설정하는 것을 의미합니다. MyISAM의 전체 텍스트 인덱스는 중국어 단어 분할을 지원하지 않기 때문에 실제로 쓸모가 없습니다. 사용자는 단어 분할 후에 공백을 추가한 다음 이를 데이터 테이블에 써야 합니다. 게다가 한자가 4개 미만인 단어는 중지 단어처럼 무시됩니다.
MyISAM은 GIS 데이터를 지원하지만 InnoDB는 지원하지 않습니다. 즉, MyISAM은 Point, Line, Polygon, Surface 등의 공간 데이터 개체를 지원합니다.
count(*) MyISAM을 사용하지 않는 경우 InnoDB보다 훨씬 빠릅니다. MyISAM에는 카운터가 내장되어 있으므로 계산할 때(*) 카운터에서 직접 읽는 반면, InnoDB는 전체 테이블을 스캔해야 합니다. 따라서 InnoDB에서 count(*)를 실행할 때 일반적으로 where와 where가 반드시 기본키 이외의 인덱스 컬럼을 포함해야 함을 동반한다. 여기서 "기본 키 이외의 것"을 특별히 강조하는 이유는 무엇입니까? InnoDB의 기본 인덱스는 원시 데이터와 함께 저장되는 반면 보조 인덱스는 별도로 저장되며 기본 키를 가리키는 포인터가 있습니다. 따라서 단순히 count(*)인 경우 보조 인덱스를 사용하여 스캔하는 것이 더 빠르며, 기본 키는 주로 인덱스를 스캔하고 동시에 원시 데이터를 반환하는 데 사용됩니다.
추천 학습: mysql 튜토리얼
위 내용은 mysql에서 innodb와 myisam의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!