문제:
큰 난수를 키로 삽입할 때 테이블에 대한 MySQL InnoDB는 MyISAM에 비해 삽입 속도가 상당히 느립니다. 예를 들어, 천만 행 테이블에 100만 행을 삽입하는 데 MyISAM에서는 6초가 걸리지만 InnoDB에서는 3433초가 걸립니다.
원인:
이러한 차이는 InnoDB의 트랜잭션 지원 메커니즘에 있습니다. 중간 버퍼링 없이 디스크에 직접 데이터를 저장하는 MyISAM과 달리 InnoDB는 모든 삽입 문에 대해 디스크에 로그 플러시를 수행합니다. 각 문에 대한 커밋 동작은 성능에 큰 영향을 미칩니다.
해결책:
InnoDB 삽입 속도를 최적화하려면 명시적 트랜잭션을 사용하는 것이 좋습니다. 트랜잭션 내에서 삽입 문을 캡슐화하면 모든 문이 실행될 때까지 커밋 작업을 연기할 수 있습니다. 이 접근 방식은 필요한 디스크 플러시 횟수를 대폭 줄여 삽입 속도를 향상시킵니다.
이 솔루션을 적용하려면 삽입 루프 전후에 다음 명령을 실행하세요.
삽입 전 루프:
START TRANSACTION;
삽입 후 loop:
COMMIT;
이 기술을 구현하면 InnoDB 삽입 성능을 크게 가속화하고 MyISAM과 비슷한 속도를 얻으면서 동시에 InnoDB의 트랜잭션 지원 및 데이터 무결성 기능의 이점을 누릴 수 있습니다.
위 내용은 MySQL InnoDB 삽입이 MyISAM 삽입보다 훨씬 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!