2017년 6월 8일 날씨가 흐렸어요. 기분이 맑아요.
이틀 연속 꿈을 꾸었는데, 어젯밤에 오랫동안 연락하지 못했던 중학교 동창이 아침 출근길에 이야기를 나눴습니다. 소녀는 현재 경치가 아름다운 구이저우(貴州)로 출장 중이다. 나는 "당신은 지금 매우 풍요로운 삶을 살고 있습니다"라고 말했습니다. 소녀는 "그건 내 촉촉하지 않은 면을 네가 못 봤기 때문이다"라고 말했다. 실제로, 인생에서 우리는 항상 다른 사람들에게 자신의 밝은 면을 보여주고 억압받는 면을 "가장"합니다.
어제 한 블로거가 저에게 블로그에서 저를 '위대한 신'이라고 부르며 질문을 하더군요. 저는 이 '위대한 신'과는 거리가 멀다는 것을 너무나 잘 알고 있었기 때문에 다시 한 번 당황했습니다. 나의 노력과 노력은 "위대한 신"을 향한 목표입니다.
블로거가 묻는 질문은 데이터 엔진과 데이터 테이블 복구 및 최적화 문과 관련된 Mysql 데이터베이스에 관한 것입니다. 저는 이러한 문제를 사용은커녕 이전에도 고려한 적이 없습니다. 그래서 그것을 이해하기 위해 몇 가지 정보를 검색했고, 이제 찾은 정보를 다음과 같이 요약합니다.
1. Mysql 데이터베이스 스토리지 엔진
개념:
스토리지 엔진은 실제로 데이터를 저장하는 방법, 저장된 데이터를 인덱싱하는 방법, 데이터를 업데이트하는 방법 및 기타 기술 구현 방법입니다. MySQL의 데이터는 다양한 기술을 사용하여 파일(또는 메모리)에 저장됩니다. 각 기술은 서로 다른 저장 메커니즘, 인덱싱 기술, 잠금 수준을 사용하고 궁극적으로 다양한 기능과 기능을 제공합니다. MySQL에서는 이러한 다양한 기술과 지원 관련 기능을 스토리지 엔진이라고 합니다.
(1) innoDB 스토리지 엔진
①innodb 스토리지 엔진의 mysql 테이블은 트랜잭션, 롤백, 시스템 충돌 복구 기능과 다중 버전 동시성 제어의 트랜잭션 보안을 제공합니다.
②innodb는 자동 증가 열(auto_increment)을 지원합니다. 자동 증가 열의 값이 비어 있으면 어떻게 기존 값보다 클 수 있습니까? 현재 값을 선택하고 이 값을 저장하세요.
③innodb 스토리지 엔진은 외래 키를 지원합니다. 외래 키가 위치한 테이블을 하위 테이블(또는 슬레이브 테이블)이라고 하며, 이것이 의존하는 테이블을 상위 테이블(또는 메인 테이블)이라고 합니다.
④innodb 스토리지 엔진에서 가장 중요한 것은 트랜잭션 및 트랜잭션 관련 기능을 지원한다는 것입니다.
⑤innodb 스토리지 엔진은 mvcc 행 수준 잠금을 지원합니다.
⑥innodb 스토리지 엔진 인덱스는 B+Tree를 사용합니다.
(2) MyISAM 스토리지 엔진
1) MyISAM 이 스토리지 엔진은 트랜잭션을 지원하지 않으며 행 수준 잠금을 지원하지 않으며 동시에 삽입된 테이블 잠금만 지원합니다. 주로 로드가 높은 선택에 사용됩니다.
2) MyISAM 유형 테이블은 정적, 동적, 압축의 세 가지 저장 구조를 지원합니다.
①정적 유형: 정의된 테이블 열의 크기가 고정되어 있다는 의미(즉, xblob, xtext, varchar 등과 같은 가변 길이 데이터 유형이 포함되지 않음)이므로 mysql이 자동으로 정적 myisam 형식.
정적 형식을 사용하는 테이블의 성능은 유지 관리 및 액세스 중에 미리 결정된 형식으로 데이터를 저장하는 데 필요한 오버헤드가 매우 낮기 때문에 상대적으로 높습니다. 하지만 이 고성능은 공간을 대가로 얻어지는 것인데, 정의할 때 고정되기 때문에 컬럼에 있는 값이 아무리 크더라도 최대값이 우선하여 공간 전체를 차지하게 된다.
②동적 유형: 열(열이 하나만 있는 경우에도)이 동적(xblob, xtext, varchar 및 기타 데이터 유형)으로 정의되면 myisam은 자동으로 동적 유형을 사용합니다.
동적 테이블은 정적 테이블보다 적은 공간을 차지하지만 필드 내용이 변경되면 해당 위치를 이동해야 할 가능성이 높기 때문에 조각화가 발생하므로 성능이 저하됩니다. 데이터가 더 많이 변경되면 조각화가 증가하고 그에 따라 데이터 액세스 성능이 저하됩니다.
조각화로 인한 데이터 접근성 감소에 대한 두 가지 솔루션이 있습니다.
a. 정적 데이터 유형을 최대한 사용합니다.
b. 테이블 조각 모음을 수행하고 테이블 업데이트 및 삭제로 인해 손실된 공간을 복구하는 테이블 최적화 문을 자주 사용합니다.
스토리지 엔진이 최적화 테이블을 지원하지 않는 경우 데이터를 덤프하고 다시 로드하면 조각화도 줄일 수 있습니다.
③압축형: 이 데이터베이스에 생성된 테이블이 전체 수명주기 동안 읽기 전용인 경우, 이 경우 점유 공간을 줄이기 위해 myisam의 압축 테이블을 사용합니다.
3) MyISAM도 B+tree 인덱스를 사용하지만 구체적인 구현 방식이 Innodb와 약간 다릅니다.
(3) 메모리 저장 엔진
① 메모리 스토리지 엔진은 기존의 일부 스토리지 엔진과 조금 다릅니다. 메모리에 저장된 데이터를 사용하여 테이블을 생성하며, 모든 데이터도 메모리에 저장됩니다.
②메모리 저장 엔진을 기반으로 하는 각 테이블은 실제로 디스크 파일에 해당합니다. 파일 이름과 파일의 테이블 이름은 동일하며 형식은 .frm입니다. 이 파일은 테이블의 구조만 저장하고 해당 데이터 파일은 메모리에 저장되므로 데이터 처리 속도가 빨라지고 테이블 전체의 처리 능력이 향상됩니다.
③메모리 저장 엔진은 기본적으로 B+Tree를 사용하는 것보다 빠른 해시(HASH) 인덱스를 사용합니다. 독자가 B-tree를 사용하려는 경우 생성 시 이를 참조할 수 있습니다.
④메모리 저장 엔진 파일 데이터는 메모리에 저장됩니다. mysqld 프로세스에서 예외가 발생하면 머신을 다시 시작하거나 종료하면 데이터가 사라집니다. 따라서 메모리 저장 엔진에서 테이블의 수명주기는 매우 짧으며 일반적으로 한 번만 사용됩니다.
(4) BlackHole Storage Engine(블랙홀 엔진)
트랜잭션 및 mvcc 행 수준 잠금을 지원합니다. 주로 로깅이나 동기화 보관에 사용됩니다. 특별한 목적이 없으면 사용하기에 적합하지 않습니다!
2. MySQL에서 테이블 최적화 및 복구
mysql을 장기간 사용하면 테이블을 복구하여 최적화할 수 있으며, 디스크 점유 공간을 줄이고 백업을 용이하게 할 수 있습니다.
REPAIR TABLE `table_name` 테이블 복구 OPTIMIZE TABLE `table_name` 테이블 최적화
REPAIR TABLE - 손상된 테이블을 복구하는 데 사용됩니다.
OPTIMIZE TABLE——유휴 데이터베이스 공간을 회수하는 데 사용되는 테이블을 최적화합니다. 테이블의 데이터 행이 삭제되면 점유된 디스크 공간은 즉시 회수되지 않습니다. OPTIMIZE TABLE 명령을 사용한 후에는 공간이 회수되고 디스크의 데이터 행이 재정렬됩니다.
참고: 데이터베이스가 아닌 디스크에 있습니다.
대부분의 경우 OPTIMIZE TABLE을 실행할 필요는 없습니다. 데이터 테이블 최적화 작업은 일괄적으로 데이터 행을 삭제한 후 정기적으로(1주에 한 번 또는 한 달에 한 번) 수행하고 해당 특정 항목에서만 실행하면 됩니다. 테이블.
위 내용은 MySQL 데이터베이스에 대한 지식 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!