2010-01-22 3 views
8

나는 약 30 개의 테이블을 가진 데이터베이스를 가지고 있고 그 중 5 개의 테이블은 쓰기 집약적이다.하나의 데이터베이스에있는 MyISAM과 InnoDB 테이블

나는 이노 엔진을 사용하는 InnoDB의 엔진을 사용하고

  • 변환의 MyISAM 엔진에 모든 테이블을 나머지를 유지하기 위해

    1. 변환 5 쓰기 집약적 인 테이블을 고려 중이 야.

    어떤 접근 방식이 더 좋은가요?

    내가의 MyISAM 엔진에 일부 테이블을 유지하려는 이유는 그들 중 일부는 약 1,000,000 행이 더 구체적으로. InnoDB로 변환 한 후이 테이블에서 "SELECT COUNT (*)"와 같은 쿼리가 얼마나 느린 지 확신 할 수 없습니다.

    나는 테스트를 수행하지 않았습니다. 전환을 시작하기 전에 어느 누구로부터 조언을받는 것이 더 낫습니다.

  • +0

    왜 두 세계에서 최고가되지 않습니까? MySQL PBXT? –

    답변

    12

    요즘은 항상 InnoDB를 사용하고 있습니다. 특히 MyISAM이 전체 테이블 잠금으로 고통받는 곳에서 언급하는 쓰기 집약적 인 테이블에서는 항상 InnoDB를 사용합니다. 여기에 포인트 비교가 있습니다.

    이유의 MyISAM을 사용 :

    • 테이블을 선택-무거운 짐을 정말 빠르다
    • 테이블 레벨 잠금 쓰기 집중적 인 다중 사용자 환경을 위해 자신의 확장 성을 제한 할 수 있습니다.
    • 작은 디스크 공간 사용
    • 전체 텍스트 인덱스
    • 병합 및 압축 테이블. 잠금

      • ACID 트랜잭션
      • 행 수준
      • 일관된 읽기 - 당신이 훌륭한 읽기 쓰기 동시성에 도달 할 수 있습니다 :

      이유 이노를 사용합니다.

    • 기본 키 클러스터링 - 경우에 따라 우수한 성능을 제공합니다.
    • 외래 키를 지원합니다.
    • 색인 및 데이터 페이지를 모두 캐시 할 수 있습니다.
    • 자동 크래시 복구 - MySQL 종료가 깨끗하지 않은 경우 InnoDB 테이블이 계속 일관된 상태로 복구됩니다. MyISAM처럼 점검/복구가 필요하지 않습니다.
    • 모든 업데이트는 InnoDB의 트랜잭션 엔진을 통과해야하며 비 트랜잭션 성 스토리지 엔진에 비해 성능이 저하되는 경우가 많습니다.

    위의 내용은 더 이상 작동하지 않는 것으로 보이는 this site에서 가져온 것입니다.

    +1

    COUNT (\ *)에 대한 귀하의 후속 관심사는 근거가 충분합니다. InnoDB는 테이블의 내부 행 수를 유지하지 않으므로 SELECT COUNT (\ *)를 수행하면 전체 테이블 스캔이 수행됩니다. 그러한 쿼리는 MyISAM에 시간을 필요로하지 않지만, 동일한 InnoDB 쿼리는 1 밀 행에 대해 많은 시간이 걸릴 수 있습니다. 일반적인 해결책은 가산 행 삽입 또는 제거 여부에 따라 수동으로 증감하는 다른 "카운터 테이블"을 유지하는 것입니다. 자세한 내용은 http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html "SHOW TABLE STATUS"를 참조하십시오. – BrainCore

    2

    장단점. 대한

    (1) 장점 : 적은 디스크 공간 사용, 훨씬 빠른 읽기 무거운 액세스 패턴

    단점에 대한의 MyISAM : 메모리가 InnoDB의 버퍼와의 MyISAM 키 버퍼 사이에 공유해야합니다. innodb 테이블은 myisam 테이블보다 약 4 배 더 큽니다. 프로그래밍 방식 코드는 교착 상태 처리에 적합해야합니다.

    인덱스 된 열 또는 기본 키를 변경하는 경우 innodb도 잠글 것입니다.

    관련 문제