인덱스는 MySQL이 데이터를 효율적으로 얻을 수 있도록 돕는 데이터 구조입니다.
다음은 제가 정리한 정보와 제가 직접 학습한 내용을 요약한 것입니다.
1. 꼭 인덱스를 사용해야 하나요?
인덱스를 생성한다고 해서 모든 성능 문제가 해결되는 것은 아닙니다.
각 애플리케이션 계층 캐시,
b) 데이터베이스 매개변수 및 버퍼 크기 조정,
c) 데이터베이스 연결 풀 크기 또는 스레드 풀 크기 조정,
d) 조정.
f) 불필요한 테이블 잠금 등을 방지하기 위해 밤에 일괄 삭제를 준비합니다.
2. mysql 인덱스 유형은 일반, 고유, 전체 텍스트의 차이점
1. PRIMARY, INDEX, UNIQUE 세 가지 유형이 있습니다. 한 가지 유형
normal: 일반 인덱스를 나타냅니다.
unique: 중복을 허용하지 않는 고유 인덱스를 나타냅니다. 예를 들어 ID 번호가 인덱스로 사용되며 고유, 특수로 설정할 수 있습니다. 기본 키는 기본 키가 비어 있지 않고 기본적으로 고유합니다.
2. FULLTEXT는 텍스트 정보를 검색하는 데 사용되는 전체 텍스트 인덱스입니다. 기사.
full text: 전체 텍스트 검색의 인덱스를 나타냅니다. FULLTEXT는 긴 기사를 검색할 때 가장 잘 작동합니다. 비교적 짧은 텍스트에 사용되며 한두 줄 정도라면 일반 INDEX도 사용할 수 있습니다.
요약하자면 인덱스된 필드의 콘텐츠 특성에 따라 인덱스 유형이 결정되며 일반적으로 일반이 가장 일반적입니다.
자세한 내용은 http://blog.sina.com.cn/s/blog_887d00920100wgf3.html을 참조하세요.
3.
인덱스를 보다 효율적으로 사용하려면 인덱스를 생성할 때 어떤 필드에 인덱스를 생성할지, 어떤 종류의 인덱스를 생성할지 고려해야 합니다.
이 섹션에서는 독자들에게 몇 가지 인덱스 디자인 원칙을 소개합니다. 좋은 물건!
1. 고유, 단조로운 인덱스 선택
고유 인덱스의 값은 고유하며, 인덱스를 통해 특정 레코드를 보다 빠르게 판별할 수 있습니다. 예를 들어 학생 테이블의 중학교 ID는 고유한 필드입니다. 이 분야에 대한 고유한 색인을 설정하면 학생의 정보를 빠르게 확인할 수 있습니다. 이름을 사용하는 경우 동일한 이름이 있을 수 있으므로 쿼리 속도가 느려집니다. 단조성은 ID와 같은 숫자가 증가하거나 감소하는 것을 의미하므로 더 효율적입니다. (7.mysql-클러스터드 인덱스에서 임의의 기본 키의 효율성.note)
2. 정렬, 그룹화 및 통합 작업이 자주 필요한 필드에 대한 인덱스 생성
ORDER BY, GROUP BY, DISTINCT 및 UNION과 같은 작업이 자주 필요한 필드의 경우 정렬 작업에 많은 시간이 낭비됩니다. 색인을 생성하면 정렬 작업을 효과적으로 피할 수 있습니다.
3. 쿼리 조건으로 자주 사용되는 필드에 대한 인덱스 생성
쿼리 조건으로 자주 사용되는 필드의 경우 해당 필드의 쿼리 속도가 전체 테이블의 쿼리 속도에 영향을 미칩니다. 따라서 이러한 필드를 인덱싱하면 전체 테이블의 쿼리 속도가 향상될 수 있습니다.
4. 인덱스 수 제한
인덱스 수가 항상 좋은 것은 아닙니다. 각 인덱스에는 디스크 공간이 필요합니다. 인덱스가 많을수록 더 많은 디스크 공간이 필요합니다. 테이블이 수정되면 인덱스를 재구성하고 업데이트하는 것이 번거롭다. 인덱스가 많을수록 테이블을 업데이트하는 데 더 많은 시간이 소요됩니다.
5. 데이터량이 적은 인덱스를 사용해 보세요
인덱스 값이 너무 길면 쿼리 속도에 영향을 미칩니다. 예를 들어 CHAR(100) 유형 필드에 대한 전체 텍스트 검색은 CHAR(10) 유형 필드보다 확실히 더 많은 시간이 걸립니다. 불가피합니다. 해결방법 6을 참고하세요.
6. 접두어를 사용하여 색인을 생성해 보세요
색인 필드의 값이 매우 긴 경우 해당 값의 접두어를 사용하여 색인을 생성하는 것이 가장 좋습니다. 예를 들어, TEXT 및 BLOG 유형 필드에 대한 전체 텍스트 검색은 시간 낭비입니다. 필드의 처음 몇 문자만 검색하면 검색 속도가 향상될 수 있습니다.
좋은 온라인 기사 참조: (MySQL 접두사 인덱스 및 인덱스 선택성) http://www.cnblogs.com/gomysql/p/3628926.html
7. 순서대로 왼쪽 일치 속성
을 따릅니다. 선택의 조건 순서는 중요하지 않습니다. SQL 커널은 정렬 및 최적화하지만 결합 인덱스를 설정할 때는 중요합니다. 5.4 mysql-index 데이터 구조.note 최종 결론
8. 더 이상 사용되지 않거나 거의 사용되지 않는 인덱스 삭제
테이블의 데이터가 대폭 업데이트되거나 데이터 사용 방식이 변경된 후에는 원래 인덱스 중 일부가 더 이상 필요하지 않을 수 있습니다. 데이터베이스 관리자는 업데이트 작업에 대한 인덱스의 영향을 줄이기 위해 정기적으로 이러한 인덱스를 찾아 삭제해야 합니다.
9. 인덱스는 최대 6개
가능할수록 좋습니다. 해당 select의 효율성은 떨어지지만, 삽입이나 업데이트 중에 인덱스가 재구축될 수 있기 때문에 삽입과 업데이트의 효율성도 감소합니다.
따라서 인덱스를 어떻게 구축할지에 따라 신중하게 고려해야 합니다. 상황. 하나의 테이블에 6개 이상의 인덱스를 두지 않는 것이 가장 좋으며, 인덱스가 너무 많으면 일반적으로 사용되지 않는 일부 컬럼에 인덱스를 구축할 필요가 있는지 고려해야 합니다.
10.emun이거나 한 자리 수준 필드만 있는 경우에는 색인을 추가할 필요가 없습니다
극단적인 경우 90만 개의 데이터로 소스에는 0과 1의 두 가지 값만 있습니다. 인덱스를 사용하려면 먼저 인덱스 파일을 읽은 다음 바이너리 검색을 수행하여 해당 데이터 디스크 포인터를 찾아야 합니다. 그런 다음 읽기 포인터를 기반으로 다시 읽습니다. 디스크의 해당 데이터는 450,000개의 결과 세트에 영향을 미칩니다. 이 경우 직접 전체 테이블 스캔보다 속도가 빠릅니다.
11. 인덱스는
에 의해 그룹화에 효과적이며 본질도 정렬 과정이며 인덱스는 6을 달성하는 데 도움이 됩니다. mysql-index Optimization strategy.note 세 번째 항목
정말 너무 많은 줄을 무의식적으로 봤을 뿐인데, 정말 한 번에 기억이 안 나지만, 위의 항목들을 하나하나 잘 생각해보면, 이는 프로덕션 애플리케이션에서 정말 유용합니다. 일부 문제를 발견했을 때 위 사항에 주의를 기울일 수 있다면 정말 의미가 있습니다. 따라서 요약하면 다음과 같습니다.
참고: 인덱스를 선택하는 궁극적인 목적은 쿼리 속도를 높이는 것입니다. 위에 제시된 원칙은 가장 기본적인 지침이지만 위의 지침을 고수할 수는 없습니다.
독자들은 앞으로도 공부와 일을 계속해서 실천해야 합니다. 실제 신청상황을 토대로 분석, 판단하여 가장 적절한 인덱싱 방식을 선택합니다.
위 내용은 Mysql-index에 대한 요약입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!