최적화 페이지 액세스 속도 (2 개) - 데이터베이스 최적화

페이지 액세스 속도 최적화 (b)

- 데이터베이스 최적화

I. 개요

데이터 테이블, 인덱스, SQL 문의 디자인 방향의 최적화를 포함하여 데이터베이스 최적화, 테이블은 데이터베이스 서버 아키텍처를 분할합니다.

둘째, 데이터베이스 설계

테이블의 건설에서 당신은 가능한 한 설계 변수 테이블의 초기 단계에서 좋은 계정 미래의 사용 시나리오를 고려해야 할 때.

1 스토리지 엔진

MySQL은 종종 언급은 InnoDB 스토리지 엔진으로, MySIAM 사실, 지금은 주로 이노을 사용하고 있습니다. 둘 사이의 차이 :

InnoDB의 파일 및 색인 데이터, 빠른 쿼리 속도 기본 키 (기본 키 인덱스는 B + 트리의 리프 노드이며, 데이터가 잎 노드에 바인딩됩니다)가, 트랜잭션을 지원, 행 수준 잠금, 외래 키에 대한 지원은 빠르게 복구 할 수 있습니다.

MySIAM는 별도로 저장 전체 텍스트 인덱싱, 테이블 수준 잠금, 색인 및 데이터 파일을 지원 트랜잭션을 지원하지 않습니다.

InnoDB의 많은 MySIAM 우수한 방법, 사실의 전체 텍스트 인덱싱 MySIAM에, 당신이 달성하기 위해 다른 도구를 사용할 수 있습니다, 그것은 일반적으로 이노 엔진을 사용한다.

엔진이 같은 두 개의 테이블이 아닌 경우 또한, 하나 MySIAM 다른 인 이노는 다음 복구는 이노에게 트랜잭션 테이블을 회복, 이러한 거래는 모든 테이블이 InnoDB의를 것을 요구, 완료되지 않았습니다.

2, 필드

1) 문자열

더 나은, 그래서 수정하지 않는 시간 조각, 높은 활용도 CHAR 고정 길이 문자열입니다. 상대적으로 길이 필드,이 VARCHAR 일관성 말하기.

2) 열거

필드의 몇 값을 열거 더 나은. 필드의 상태를 나타냅니다, 그것은 너무 자주 설계 할 수있다. 열거 MySQL의 바닥은 INT 저장소는 높은 효율로 바뀝니다. 또한, 시간을 절약하기 위해, 1, 2 이것을 사용하는 것은 권장하지 않습니다, 당신은 여러 가지 상태를 나타냅니다 영어를 사용할 수있는 더 나은 식별됩니다.

3) 디지털

당신은 그들이 서명되지 않은 추가 할 수 있습니다, 부정적 필요가 없습니다 소수를 고려하기 전에 정확한 소수가 필요합니다.

셋째, 인덱스

인덱스 검색 속도를 빠르게하지만, 추가 및 삭제를 들어,도 있으므로 무차별 추가되지 제공이 필요하다 해당 B + 트리 인덱스를 유지할 필요가 있습니다.

이노의 인덱스, 기본 키의 서브 인덱스 및 보조 인덱스입니다.

1 차 키 인덱스

이노 기본 키 인덱스와 함께 데이터 바인딩 때문에 찾는 기본 키에 따라, 시간의 값을 발견 할 때, 그 때문에 이노 기본 키 인덱스 룩업 매우 빠르고, 대응하는 데이터를 찾아 낼 것이다.

아래 그림과 같이 :

또한 당신은 이노 엔진, 볼 수는 기본 키 데이터에 바인딩 때문에 엔진 InnoDB의 테이블은 기본 키를 설정해야합니다.

또한, 기본 키 점차 증가 숫자를 권장 제공하고, 따라서 기본 키 B + 트리 회전을 너무 피, 기본 키를 수정하지 않습니다.

2 보조 색인

기본 키뿐만 아니라, 다른 인덱스는 보조 인덱스 총칭 함. 저장하기 위해 다른 B의 + 트리와 기타 인덱스는, 자식 노드는이 라인에 해당하는 기본 키 정보가 저장됩니다.

따라서, 해당 기본 키를 찾기 위해, 보조 인덱스를 찾기 위해, 필요의 기본 키는 우리가 해당 데이터를 찾을 수는 B + 트리를 찾아 이동합니다.

3, 공동 색인

여러 필드가 함께 인덱스를 구성하는 경우, 공동 인덱스된다. 공동 지수는 가장 왼쪽 접두사의 원칙을 따르도록해야합니다. 이러한 공동 인덱스 a_b_c을 수립있다.

다음 문은 인덱스에서 사용할 수 있습니다 :

여기서 A = 'XX'및 B = 'XX'및 C = 'XX'를 선택 * XXX;

여기서 A = 'XX'및 B = 'XX'XXX 선택 *;

어디 = 'XX'XXX에서 * 선택;

여기서 A = 'XX'및 B = 'XX'및 C> 'XX'XXX 선택 *;

XXX 선택 * 여기서 A = 'XX'및 b> 'XX';

어디에> 'XX'XXX에서 * 선택;

다음 문의 인덱스보다 작 :

XXX 선택 * 여기서 B = 'XX'및 C = 'XX';

여기서, A> 'XX'및 B = 'XX'및 C = 'XX'를 선택 * XXX;

필드 앞의 사용에보다 큰 또한, 후면은 인덱스 필드를 사용할 수 없다. 연결 조인트 인덱스를 저장하기 때문에 B + 트리의 복수, 루트 노드의 리프 노드는 필드를 하나 개의 필드에 나섭니다. 나타나는보다 크면 역방향 필드 범위, 즉, 인덱스를 사용하지 결정될 수 없다.

4, 고유 인덱스

유일한 인덱스는 인덱스 기능뿐만 아니라, 보조 인덱스뿐만 아니라 필드가 동시성에 대해 중복 새로운 역할을 방지 데이터베이스에서 고유한지 확인 할 수 있습니다.

5, 인덱스 노트

1) 위치를 들면, 인덱스를 구축하는 것으로 간주 될 수있는 그룹에 의해 주문.

2) 큰 필드에 색인 차별, 성별 이런 종류의 필드 인덱스는 이해가되지 않습니다.

3) 문자열의 유형에 대해 접두사 지수, 설명 필드의 처음 7 개 문자 예를 들어, 인덱스, 문을 만드는 것이 좋습니다 : 키를 추가 xxtable 테이블을 변경 (설명 (7));

네, SQL 문을 최적화

1, 인덱스를 사용하려고

1)의 NULL 값 필드를 피하기 위해 WHERE 절,! =, 또는 <>와하지에서 포기 인덱스 테이블 전체 스캔을 초래할 수 비 탐색 연산 식 또는 함수 연산 같은 문자로 시작.

2) 또는 양쪽이 긴 컬럼의 일측이 열을 인덱싱되지 않기 때문에, 인덱스의 사용을 포기 이끌 열 인덱스를 조회한다. 이는 적어도 일부있는 인덱스 데이터를 사용할 수 있으며, 대신에 또는 조합으로 간주 될 수있다.

숫자가있는 경우 3) 문자열 유형의 경우, 쿼리 시간은 인덱스를 사용하기 위해 문자열에 인용 부호, 필수 추천을 기억해야한다.

2. 기타 쿼리 최적화

1) 데이터의 총량은 제한으로 간주되지 해야하는 경우.

2) 서브 쿼리 서브 쿼리의 MySQL의 피,이 계획의 내부 구현이 실행됩니다 먼저 확인을 한 후 데이터가 멋지다 때 먼저 표를 확인하는 대신, 테이블의 모양과 일치, 쿼리 속도가 매우 느려질 수 있습니다.

3)에 의해 그룹에 대해, MySQL은 COL1, COL2 ... 정렬 필드를 기준으로 모든 그룹. 쿼리가 GROUP BY를 포함하여 소비하는 경우, 결과의 정렬을 피하려면, 당신은 NULL 금지 명령에 의해 순서를 지정할 수 있습니다.

V, 테이블 분할

데이터의 양이 너무 큰 테이블, 테이블 스캔 데이터의 양을 줄이기 위해 해결 간주 될 수있다.

도 1은, 횡 테이블 분할

너무 많은 데이터, 데이터는 특정 규칙, 측면 부분 테이블이있을 때. 거래 목록, 예를 들어, 사용자가 해시에 대한 서브 테이블 ID, 사용자 ID 일 수 있으며, 다른 해시 결과는 다른 테이블에 상당하고, 기입 알고리즘 해당 테이블 아이디 CRUD 캔 방법.

2 종 테이블 분할

이 큰 필드는,이 필드는 종종 쿼리해야하지 않는 경우, 당신은 테이블 등 기사의 제목, 요약, 날짜, 키워드로 기사를 저장할 수있는 테이블을 분리 할 수 ​​있지만, 문서의 특정 콘텐츠를, 당신은을 분리 할 수 ​​있습니다 테이블, 그래서 문서 목록 페이지 속도를 향상시킬 수있다.

3, 파티션

MySQL의 파티션은 자동으로 데이터 파일에 대응하는 데이터를 찾기 위해 MySQL이 내부 규칙에 따라 데이터 테이블에 다른 파일에 저장되는 기능을 수행하고있다.

여섯째, 데이터베이스 서버 아키텍처

1 읽기 분리 및 쓰기

상업 응용 프로그램이 데이터베이스는 읽기 및 쓰기는 종종 고립, 일반적으로 도서관에서 읽은 중앙 도서관에 기록됩니다. 기본 데이터베이스 일관성 로그를 중계함으로써 달성된다.

데이터가 변경, 마스터 데이터베이스의 SQL 문은 다음 릴레이 로그를 작성하고, 할 때마다 해당 데이터베이스 로그에서 이동 한 다음 SQL을 기록합니다 라이브러리에서 하나 하나 실행.

2, 로드 밸런싱

부하 분산 mycat 다른 플러그인에 의해 달성 될 수 있고, 파일에 저장된 기본 데이터베이스 추상화로서 이해하고 Mycat 데이터베이스 추상화 될 수있다.

공공 마이크로 채널 번호에 원래 릴리스 - 코더 생각하는 사랑 (phpthinker)

추천

출처www.cnblogs.com/zmdComeOn/p/11704921.html