1. 테이블을 더 신속 하 게 통과 하는 인덱스를 사용 합니다.
기본적으로 설정 하는 인덱스는 클러스터형된 인덱스, 하지만 가끔은 최적의. 클러스터 되지 않은 인덱스에서 데이터는 데이터 페이지에서 임의로 저장 물리적으로. 적절 한 인덱스 디자인 한다 분석 및 다양 한 쿼리의 예측에 기반. 일반적으로:
A. 당신은 당신이 많은 수의 중복 값을가지고 있고 종종 범위 쿼리 경우 클러스터형된 인덱스를 설정 고려할 수 있다 (>, <>, =, < =)과 그룹화 순서에 의해 발생 하는 열.
B. 여러 열은 자주 동시에 액세스 하 고 각 열 복합 인덱스;을 설정 고려 하는 중복 값이 포함 되어
C. 복합 인덱스의 중요 한 쿼리, 최고의 열 인덱싱 극대화를 가장 자주 사용 되는 열 수 있어야 합니다. 인덱스는 더 나은, 그냥은 반대. 너무 많은 인덱스 인해 효율적으로 시스템 성능을 하지만 하지 더 많은 인덱스를 향상을 도울 수 있다. 사용자는 테이블에 인덱스를 추가 하면, 인덱스 컬렉션을 유지 필요한 업데이트입니다.
대량 쿼리 가능한 형식 변환 조금에서 2.
3. order BY 및에 의해 Gropu: 모든 인덱스에 의해 형태와 구문에 의해 그룹을 사용 하 여 선택의 성능 향상에 기여.
4, 열에 작업 테이블 검색, 데이터베이스 함수, 계산 식 및 등을 포함 하는 쿼리는 등호의 오른쪽에 작업을 이동 하려면 서명 가능한 때 발생 합니다.
5.에, 또는 절 사용 하 여 워크시트 인덱스를 무효화. 많은 수의 중복 값을 생성 하지 않는 경우 열 수 문장을 고려할 수 있습니다. 오픈 절 인덱스를 포함 해야 합니다.
6, 사용자 요구를 충족할 수 있는 만큼 최대한 작은 데이터 유형을 사용 해야 합니다: 예를 들어 int 대신 mediumint를 사용 하 여
7 일에 모든 열을 설정 하려고 NULL, NULL, 저장 하려는 경우 수동으로 설정, 기본 값으로 설정 하는 대신.
8, varchar, TEXT, BLOB 형식으로 가능한 한 조금
9, 귀하의 데이터는 단지 몇 가지 당신은 몇 알으십시오. 열거형 형식을 사용 하는
10, Graymice로 이라고, 인덱스를 작성 합니다.
여기 내가 찾을 인덱스를 크게 쿼리의 효율성을 향상 시킬 수 있는 실험이 이다:
나는 회원 정보 테이블 사용자, 37,365 사용자 레코드:
인덱싱 없이 쿼리:
SQL 문을 a:
코드:
선택 * 사용자 이름 같은 사용자 ' % % ';
Mysql-앞에 8 쿼리 시간: 1.40,0.54,0.54,0.54,0.53,0.55,0.54 발견 960 레코드
SQL 문 b:
코드:
선택 * 사용자가 있는 사용자 이름 같은 '쑤 %';
Mysql-앞에 8 쿼리 시간: 0.53,0.53,0.53,0.54,0.53,0.53,0.54,0.54 836 기록 발견
SQL 문을 c:
코드:
선택 * 사용자가 있는 사용자 이름 같은 '% 쑤';
Mysql-앞에 8 쿼리 시간: 0.51,0.51,0.52,0.52,0.51,0.51,0.52,0.51 발견 7 레코드
사용자 이름 열에 인덱스를 추가할:
코드:
사용자 (사용자 이름 (6));에 인덱스 Usernameindex를 만들기
다시 쿼리:
SQL 문을 a:
코드:
선택 * 사용자 이름 같은 사용자 ' % % ';
Mysql-앞에 8 쿼리 시간: 0.35,0.34,0.34,0.35,0.34,0.34,0.35,0.34 발견 960 레코드
SQL 문 b:
코드:
선택 * 사용자가 있는 사용자 이름 같은 '쑤 %';
Mysql-앞에 8 쿼리 시간: 0.06,0.07,0.07,0.07,0.07,0.07,0.06,0.06 836 기록 발견
SQL 문을 c:
코드:
선택 * 사용자가 있는 사용자 이름 같은 '% 쑤';
Mysql-앞에 8 쿼리 시간: 0.32,0.31,0.31,0.32,0.31,0.32,0.31,0.31 발견 7 레코드
실험 과정에서 다른 프로그램을 열지 않았다, 위의 데이터에 단일 테이블 쿼리를 인덱싱 크게 향상 시킬 수 있는 쿼리 속도 보여줍니다.
말을 또 다른 점은 인덱스를 설정한 경우 속도 증가 '쑤 %' 형식 쿼리에 대 한 가장 확실 한. 결과적으로, 우리는 이런 방식으로 쿼리 하는 SQL 문을 작성할 때 하려고 합니다.
여러 테이블 쿼리에 대 한 우리의 최적화 원리는:
필드에에서 관련 된 조인 왼쪽된/오른쪽 조인의 조건문에... + 조건에 인덱스를 작성 하려고 합니다.
단일 테이블 쿼리를 보다 인덱스의 장점을 반영 하는 여러 테이블 쿼리를 더 잘 할 수 있습니다.
11, 인덱싱의 원리의 설립:
접두사 값 열에서 데이터의 매우 작은 경우에, 우리가 더 나은 접두사만 색인 것 이다. MySQL이이 인덱스를 지원합니다. 위에서 사용 된 색인 방법은 사용자의 왼쪽 6 문자 색인 것 이다. 짧은 색인, 더 적은 디스크 공간 그것은 걸립니다, 그리고 그것을 검색 하는 데 걸리는 시간이 줄어듭니다. 이 메서드는 왼쪽된 255 자까지 인덱스 수 있습니다.
많은 경우에, 우리는 데이터의 여러 열 생성을 색인 수 있습니다.
인덱스 찾을 수 표시 필드에는 쿼리 조건에 비교 되는 필드에 따라 결정 되어야
12, 미치도록 질문:, 또는 절 사용 하 여 워크시트 인덱스를 무효화. 많은 수의 중복 값을 생성 하지 않는 경우 열 수 문장을 고려할 수 있습니다. 오픈 절 인덱스를 포함 해야 합니다.
어떻게 해결이 문장, 예를 들어 주세요
예는 다음과 같습니다.
FIELDS1 기본 인덱스는 FIELDS1와 Fields2에 인덱스를 설정 하는 경우
다음 SQL은 인덱스를 사용 하 여
코드:
선택 * tablename1에서 어디 fields1 = 'value1' 및 fields2 = 'value2'
다음 SQL 인덱스를 사용 하지 않습니다.
코드:
선택 * tablename1에서 어디 fields1 = '값 1' 또는 fields2 = 'value2'
13. 인덱스는 쿼리의 속도에 상당한 증가 제공 하지만 인덱스 또한 추가 하드 디스크 공간을 차지 (물론, 아무 문제가 있다 일반적인 하드 디스크 공간), 인덱스는 또한 테이블에 새 레코드를 삽입할 때 업데이트와 업데이트 해야 하 고.
일부 테이블 그들은 종종 삽입 및 적은 선택. 그렇지 않으면 데이터;을 쓸 때마다 인덱스를 다시 작성 하는 경우 인덱싱할 필요가 없습니다. 이 실제 상황에 따라 다릅니다 및 일반적으로 인덱스가 필요 합니다.
14. 나 쿼리 효율성에 대해 의구심을가지고, 일반은 직접 MySQL와 설명 상황 추적.
Mysql-앞의 시간 길이 비교를 사용 하 여 내가 생각에 더 정확한 쿼리에서 검색 수.