MySQL의 엔진 : 이노 나의 MyISAM?

의 MyISAM 스토리지 엔진

       의 MyISAM 기본 스토리지 엔진이다. 그것은 이전 ISAM 코드를 기반으로하지만, 많은 유용한 확장 기능을 가지고 있습니다. 기능의의 MyISAM 스토리지 엔진의 일부 :

      모든 데이터 값이 낮은 첫번째 바이트에 저장된다. 이는 운영 시스템과 데이터 분리 수단을 허용한다. 이진 휴대 유일한 요구 사항 및 IEEE 부동 소수점 형식 (예 : 일부 시스템으로 최근 이십년 등) 기계의 보수 (주요 기계가 완전히 지배)이다. 바이너리 호환성을 지원하지 않는 유일한 기계 시스템을 포함됩니다. 이러한 시스템은 때때로 특별한 프로세서를 사용합니다.

        저장된 데이터의 첫 번째 바이트가 심각하게 낮은 속도에 영향을 미치지 않으며 열 데이터 바이트는 일반적으로 결합되지 않고, 한 방향으로부터 판독 정렬되지 않은 바이트를 역방향 판독로부터 더 많은 자원을 소비 이하이다. 서버의 열 코드의 값이 다른 코드보다 타이트하지 않는 것 같습니다 가져옵니다.

         (63 파일 길이까지) 대형 파일은 대용량 파일 시스템 및 운영 체제에 대한 지원에서 지원됩니다.

         때 삭제 및 업데이트와 혼합, 동적 크기의 행 적은 이물질을 삽입합니다. 이 블록은 인접 결합에 의해 삭제되고, 그 다음 블록이 삭제되면, 이것은 자동으로 수행 하나까지 연장된다.

         MyISAM 테이블 당 인덱스의 최대 수는 64입니다. 이 재 컴파일에 의해 변경 될 수 있습니다. 인덱스 당 최대 열 수는 16입니다.

         최대 키 길이는 1000 바이트입니다. 이것은 또한 컴파일러에 의해 변경 될 수 있습니다. 250 바이트의 키 길이의 경우보다 1024 바이트보다 블록 지출 열쇠입니다.

         BLOB 및 TEXT 컬럼은 인덱스 할 수 있습니다.

        NULL 값은 열 인덱스에 사용할 수 있습니다. 이 키 당 0-1 바이트를 차지한다.

         상위 바이트 모든 수치는 첫번째 키 인덱스 높은 압축을 허용하기 위해 저장되어있다.

        (당신이 AUTO_INCREMENT 컬럼의 사용으로) 기록을 위해 행 삽입을 분류 할 때 높은 인덱스 트리 만 노드 키를 포함 있도록 분할됩니다. 이 공간 활용 인덱스 트리를 향상시킨다.

         테이블 당 열 AUTO_INCREMEN 내부 처리. 의 MyISAM에 대한 INSERT 및 UPDATE 작업이 자동으로 열을 업데이트합니다. 이것은 (10 % 이상) AUTO_INCREMENT 컬럼 빠르게합니다. 최고 값 시퀀스가 ​​삭제 한 후 더 이상 사용되지 않습니다. (마지막 AUTO_INCREMENT 컬럼이 다중 열 인덱스로 정의되는 경우, 가중치를 사용하는 경우가 발생할 수 상위 시퀀스로부터 제거된다). ALTER TABLE AUTO_INCREMENT 값은 리셋 또는 myisamch 될 수 있습니다.

         테이블 데이터의 중간 여유 블록을 제기하지 않는 경우, 동시에 테이블에서 읽은 다른 스레드에서, 당신은 테이블에 새 행을 삽입 할 수 있습니다. (이것은 동시 동작으로 알려져있다). 자유 블록의 결과를 동적으로 업데이트 결과의 로우의 현재 길이보다 행 이상의 콘텐츠 데이터를 삭제로 발생한다. 모든 자유 블록이 모두 소진 될 때 (작성), 다음 동시 삽입.

         당신은 절 13.1.5를 참조 표 더 높은 속도를 만들려면 DATA DIRECTORY 및 INDEX DIRECTORY 옵션, 다른 디렉토리에 데이터 파일과 인덱스 파일을 넣을 수 있습니다 "TABLE 구문을 만들 수 있습니다."

         각 문자의 열은 서로 다른 문자 집합을 설정할 수 있습니다.

        의 MyISAM 인덱스 파일과 테이블이 제대로 닫혀 있는지 여부를 나타내는 플래그. 테이블이 제대로 닫혀 있지 않은 경우, 너무 열 때 자동으로 선택되어 --myisam-복구 옵션을 mysqld에, MyISAM 테이블을 시작하면, 그들은 테이블을 복구 할 수 있습니다.

        당신이 myisamchk를 실행하는 --update 상태 옵션을 사용하면 확인, 그것은 테이블을 표시했다. --fast는이 로고를 가지고 있지 않는 테이블을 확인을 myisamchk.

        myisamchk는 몇 가지 핵심 스토리지 통계뿐만 아니라 전체 키 저장 통계 --Analyze.

        myisampack를이 BLOB 및 VARCHAR 열을 포장 할 수 있습니다.

의 MyISAM은 또한 다음과 같은 기능을 지원합니다 :

         진정한 VARCHAR 유형을 지원, VARCHAR 시작하는 2 바이트의 컬럼 길이에 저장됩니다.

         이 VARCHAR 테이블은 고정 또는 동적 레코드 길이 될 수있다.

         VARCHAR와 CHAR 열은 64킬로바이트까지 될 수 있습니다.

         계산했습니다 메싱 인덱스 UNIQUE 위해 사용될 수있다. 이것은 당신이 표에서 합병 컬럼에 UNIQUE 가질 수 있습니다. (단, 당신은 UNIQUE 계산 된 인덱스를 검색 할 수 없습니다).

InnoDB 스토리지 엔진

이노가와와 MySQL이 제공하는 커밋 트랜잭션 안전 (ACID 호환) 스토리지 엔진의 롤백 및 크래시 복구 기능을 제공합니다. 이노 행 수준 SELECT 문을 잠그고도 일관된 비 잠금 읽기 오라클 스타일을 제공합니다. 이러한 기능은 다중 사용자 배포 및 성능을 향상시킬 수 있습니다. 이노에 잠겨 확장 할 필요가 InnoDB의 BOC 수준 잠금 때문에 매우 작은 공간을 없다. InnoDB는 또한 외래 키는 필수 지원합니다. SQL 쿼리에서 자유롭게 심지어 같은 쿼리도 혼합 할 수 있습니다, 혼합 다른 MySQL의 테이블이 InnoDB의 테이블 유형을 입력 할 수 있습니다.

이노는 데이터의 최대 성능을 처리 엄청난 양을 위해 설계되었습니다. 그 CPU 효율은 아마 다른 디스크 기반 관계형 데이터베이스 엔진이 일치 할 수있다.

InnoDB 스토리지 엔진은 완전히 메인 메모리에 캐시 데이터 및 인덱스에 MySQL 서버, InnoDB 스토리지 엔진과 통합 자체 버퍼 풀을 유지한다. InnoDB의 테이블 스페이스에서의 테이블 및 인덱스를 저장하는 테이블 공간은 여러 개의 파일 (또는 원시 디스크 파티션)을 포함 할 수 있습니다. 이것은 각 테이블을 별도의 파일로 존재 MyISAM 테이블 등 MyISAM 테이블 다르다. InnoDB 테이블은 파일 크기가 운영 체제 2GB로 제한되는 경우에도, 어떤 크기가 될 수 있습니다.

이노는 MySQL의 바이너리 배포판에 기본적으로 포함되어 있습니다. 윈도우 필수 설치 프로그램은 이노 Windows에서의 MySQL의 기본 테이블을 만든다.

InnoDB의 높은 성능을 요구하는 다수의 대규모 데이터베이스 사이트에서 생성하는 데 사용됩니다. 유명한 인터넷 뉴스 사이트 Slashdot.org은 이노에서 실행됩니다. Mytrix, Inc.의 저장소 더 이노에 1TB의 데이터보다 이노에 두 번째 800 삽입로드 / 업데이트에 따라 처리 다른 사이트가 있습니다.

이노의 MyISAM과 차이점

개요 차이 :

의 MyISAM은 일반적으로 너무 많은 사람들이 물건을 걱정하지 않고, 기본 MySQL의 스토리지 엔진이다. 매우 까다로운 일이 스토리지 엔진의 종류를 결정하지만, 여전히 우리는 여기에 문서의 값의 MyISAM보고 가서이 두 가지가 가장 일반적이기 때문에 InnoDB하지만, 두를 고려한다.

이제 몇 가지 질문부터 시작하자 :

귀하의 데이터베이스는 외래 키가 할 수 있는가?

당신은 트랜잭션 지원이 필요하십니까?

당신은 전체 텍스트 인덱스를해야합니까?

당신은 무엇을 자주 쿼리 모드를 사용할 수 있습니까?

어떻게 데이터의 많은?

이러한 문제에 대한 생각은 위의 올바른 방향을 찾을 수 있지만, 절대 아니다. 당신이 거래 또는 외래 키를 필요로한다면, InnoDB는 더 나은 방법이 될 수 있습니다. 당신은 전체 텍스트 인덱스가 필요한 경우이 시스템에 내장되어 있기 때문에, 일반적으로의 MyISAM은 좋은 선택하지만, 우리가 실제로 자주하지 않는 이백 만 행을 테스트하기 위해 이동이다. 그래서 경우에도 약간 느린, 우리는 스핑크스를 사용하여 이노에서 전체 텍스트 인덱스를 얻을 수 있습니다.

데이터의 크기는 대용량 데이터 세트 때문에 트랜잭션 처리 및 장애 복구에 대한 지원으로, InnoDB의 방법을 선택하는 경향이 선택한 스토리지 엔진의 종류에 영향을 미치는 중요한 요소이다. 작은에서 데이터베이스 복구 시간의 길이를 결정, InnoDB의 트랜잭션 로그는 데이터 복구에 사용할 수있는, 더 빨리 될 것입니다. 의 MyISAM은 이런 일, InnoDB에 단 몇 분을 건조하는 데 몇 시간 또는 몇일이 걸릴 수 있습니다.

당신은 데이터베이스 테이블도 성능 권리에 영향을 미치는 중요한 요인이 될 수 있습니다 작동하는 데 사용. 예를 들어 : MyISAM 테이블에 COUNT (), 매우 빠르고, InnoDB 테이블에 매우 고통 스러울 수 있습니다. 기본 키 쿼리는 매우 빠른 이노에서, 매우,하지만 우리의 기본 키가 너무 오래 또한 성능 문제를 일으킬 수있는 경우이다의 조심해야합니다. 의 MyISAM 문에 삽입 많은 수의 빠른 수 있지만 업데이트는 빠르게 InnoDB의 아래에있을 것입니다 - 특히 대규모 동시.

그래서, 결국 당신은 사용할 일 확인합니까? 경험에 따르면, 몇 가지 작은 응용 프로그램 또는 프로젝트의 경우, 다음의 MyISAM 더 적합 할 수있다. 물론, 대규모 환경에서의 MyISAM의 사용은 큰 성공이 될 것이다, 그러나 항상 그런 것은 아니다. 당신은 데이터 항목의 다량을 사용뿐만 아니라, 거래 또는 외래 키를 지원을 계획하고 있다면, 당신은 정말 직접적인 방법은 이노를 사용합니다. 그러나 InnoDB 테이블은 더 많은 메모리와 스토리지를 필요 명심, InnoDB 테이블에 MyISAM 테이블 변환 100GB의 당신이 아주 나쁜 경험을 할 수 있습니다.

요약의 차이 :

1.InnoDB FULLTEXT 인덱스 유형은 지원되지 않습니다.

2.InnoDB의 행의 특정 숫자, 즉, 선택 개수의 구현을 테이블을 저장하지 (*) 표에서, InnoDB는 다시 행 수를 계산하기 위해 전체 테이블을 스캔 만의 MyISAM은 단순히 저장된 줄 번호를 읽을 때 그것은 할 수 있습니다. 테이블의 작동 두 종류 같은 곳 개수 (*) 문은 조건이 포함 된 경우, 그합니다.

3. 필드의 AUTO_INCREMENT 유형의 경우, InnoDB는 현장의 인덱스를 포함해야하지만 MyISAM 테이블에서, 당신은 인덱스 및 기타 분야 함께 공동을 설정할 수 있습니다.

때 테이블에서 4.DELETE, InnoDB는 테이블을 다시 설정하지만 선으로 줄을 삭제하지 않습니다.

MASTER 이노 동작으로부터 5.LOAD 테이블은 용액 제 이노 테이블 MyISAM 테이블에 넣고, 작동하고 이노 테이블로 데이터를 가져올 수 있지만, 사용되는 추가 이노 특성 (예를 들어, 외래 키)를위한하지 테이블이 적용되지 않습니다.

또한, 행 잠금 InnoDB 테이블은 MySQL을 스캔 할 범위를 확인할 수없는 경우, InnoDB 테이블은 또한 업데이트 테이블 세트 NUM = 1 이름과 같은 "%의 단 %"과 같은 SQL 문을의 구현에, 전체 테이블을 잠글 것, 절대 아니다

방법의 성능을 향상 이노 :

의 MyISAM과 InnoDB의 스토리지 엔진의 성능 차이가 InnoDB에 대한 크지 않다, 성능에 미치는 영향은 주로이 옵션을에서 innodb_flush_log_at_trx_commit되고, 설정 한 경우, 다음 (1), 다음 데이터가 자동으로 제기 될 때마다 삽입 성능의 급격한 감소로 이어지는, 그것은해야 효율성을보기 위해 0으로 설정 새로 고침 로그와의 관계는 물론, 당신은 "AUTOCOMMIT = 0을 설정"에서 같은 SQL을 제출할 수 있습니다 좋은 성능을 달성하기 위해 설정되어 크게 개선되었다. 또한, 나는 그 이노을 innodb_buffer_pool_size 설정하여 성능을 향상시킬 수 있습니다 들었지만, 나는 특별한 테스트가 크게 개선 찾을 수 없습니다.

이러한 동시 다수의 경우 등 트랜잭션 지원, 저장 프로 시저, 뷰, 행 수준 잠금, 같은 InnoDB에 많은 그것의 좋은 기능은, 내가 확실히 이노의 성능을 믿기 때문에 기본적으로 우리 대신 우리의의 MyISAM 엔진의 InnoDB의 사용을 고려할 수 있습니다 훨씬 강한의 MyISAM보다, 물론, my.cnf 파일에서 적절한 구성이 상대적으로 중요한, 좋은 구성은, 효과적으로 응용 프로그램 속도를 높일 수 있습니다.

테이블의 모든 종류의 만병 통치약, MySQL의 가장 큰 성능상의 이점을 재생하는 데 사용 테이블 유형에 대한 사업의 오른쪽 유형을 선택할 수있는 유일한 권리가 아닙니다.

추천

출처blog.csdn.net/weixin_34205076/article/details/91012481