>  기사  >  데이터 베이스  >  mysql 인덱스란 무엇이며 어떻게 사용하나요? 아주 자세하게 정리되어 있어요

mysql 인덱스란 무엇이며 어떻게 사용하나요? 아주 자세하게 정리되어 있어요

php是最好的语言
php是最好的语言원래의
2018-07-30 17:08:361382검색

MySQL을 배우다 보면 인덱스라는 단어를 자주 접하게 됩니다. 예전에는 막연하게 사용법만 알고 있었는데 설명하기가 좀 어려워서 틈나는 대로 틈틈이 책을 몇권 읽었다가 나중에 누군가 물어볼까봐 정리해서 정리했습니다. 결국 나에게 좋은 인상을 주었고, 아니오라고 말하기가 부끄럽습니다. 결국 나는 몇 년 동안 이것들에 노출되었습니다. php mysql:

begin!

1. 인덱스란 무엇입니까

1. 인덱스 소개
인덱스는 실제로 파일 형태로 디스크에 저장된 데이터 구조입니다. 디스크 I/O 작업. 디스크 I/O는 메인 메모리와 달리 기계적 이동 비용이 발생하므로 디스크 I/O의 시간 소모가 크다.

2. IO 소개
IO는 컴퓨터의 입출력을 의미합니다. 프로그램과 런타임 데이터는 메모리에 상주하므로 CPU의 초고속 컴퓨팅 코어에 의해 실행됩니다. 일반적으로 데이터가 교환되는 장소는 디스크입니다. 네트워크 등에는 IO 인터페이스가 필요합니다. 생활 예: 기억해야 할 모든 핵심 사항은 노트에 기록해야 하며, 필요할 때마다 노트에 가서 기록을 읽으면 기억력이 좋은 사람이 IO입니다. 이 문제를 기억하세요. 직접 읽을 수 있습니다. 이것이 캐시입니다(컴퓨터에 항상 저장할 수는 없습니다).

2. 인덱스 알고리즘

1. 데이터베이스는 기본적으로 B+Tree 알고리즘을 사용하여 구현됩니다

2. 데이터베이스 인덱스는 디스크 I/O 시간을 사용하여 인덱스 구조의 품질을 평가합니다

3.B-Tree
(1) B-Tree의 정의는 검색이 최대 h-1 노드(루트 노드가 메모리에 상주함)에 액세스해야 함을 보여줍니다. 데이터베이스 시스템의 설계자는 디스크 미리 읽기 원칙을 교묘하게 활용하여 노드의 크기를 한 페이지와 동일하게 설정하여 각 노드가 완전히 로드되는 데 하나의 I/O만 필요하도록 했습니다

(2) B-Tree의 실제 구현도 다음과 같은 기술을 사용해야 합니다. 새 노드를 생성할 때마다 페이지 공간을 직접 적용하면 노드가 페이지에 물리적으로 저장됩니다. 페이지 정렬되어 있으므로 노드는 하나의 I/O만 필요합니다

(3) B-Tree 저장 구조를 사용하면 검색 시 I/O 횟수가 일반적으로 3회를 초과하지 않으므로 B-Tree를 인덱스 구조는 매우 효율적이지만 B-트리의 노드는 실제 상황에 따라 많은 양의 키워드 정보와 분기를 포함할 수 있습니다

4.B+Tree
(1) B-트리의 검색 복잡도는 O입니다. (h)=O(logdN)이므로 트리의 아웃 차수 d가 클수록 깊이 h가 작을수록 I/O 수가 줄어듭니다. B+Tree는 각 노드가 하나의 페이지 크기이기 때문에 출력 차수 d의 너비를 정확하게 늘릴 수 있으므로 출력 차수의 상한은 노드에 있는 키와 데이터의 크기에 따라 다릅니다.

(2) 내부 B+Tree의 노드는 데이터가 제거되므로 더 큰 아웃도를 가질 수 있으므로 더 나은 성능을 가질 수 있습니다

3. 클러스터형 인덱스와 비클러스터형 인덱스

1. 물리적 저장 순서 클러스터형 인덱스의 데이터 수는 인덱스 순서와 동일합니다. 즉, 인덱스가 인접해 있는 한 해당 데이터도 디스크에 인접하게 저장되어야 합니다. 클러스터형 인덱스 쿼리 효율성은 비클러스터형 인덱스보다 훨씬 높습니다

(3) 테이블의 레코드는 하나의 물리적 순서로만 저장할 수 있으므로 각 테이블은 하나의 클러스터형 인덱스만 가질 수 있습니다

(4) Innodb 기본 인덱스

2 . Non-clustered index

(1) Non-clustered index, 책의 부록과 비슷한데, 전문용어는 어느 장에 나오나요? 전문용어는 순서대로 있는데 나오는 순서가 맞지 않네요. 그러나 테이블은 하나 이상의 비클러스터형 인덱스를 가질 수 있습니다

(2) 구현 원칙은 리프 노드를 사용하여 참조 행의 기본 키를 저장하는 것입니다(클러스터형 인덱스라고 할 수 있음)

(3) 클러스터형 인덱스는 비클러스터형 인덱스의 일종, 즉 기본 + 보조 인덱스의 인덱싱 방법입니다. 이 기본 + 보조 인덱스의 장점은 데이터 행이 이동되거나 페이지가 분할될 때 보조 인덱스 트리가 필요하지 않다는 것입니다. 보조 인덱스 트리는 데이터의 특정 물리적 주소가 아닌 기본 인덱스의 기본 키 키워드를 저장하기 때문에 업데이트됩니다

(4) 따라서 비클러스터형 인덱스는 인덱스에 두 번 액세스해야 합니다

4 . 인덱스 종류

1.UNIQUE(고유 인덱스): 같은 값은 나올 수 없습니다. NULL 값이 있습니다

2.INDEX(일반 인덱스): 같은 인덱스 내용이 허용됩니다

3.PROMARY KEY(기본 키 인덱스): 동일한 값은 허용되지 않습니다

4.FULLTEXT INDEX(전체 텍스트 인덱스): 의 특정 단어에 대한 값을 대상으로 할 수 있지만 효율성이 매우 낮습니다

5. 결합 인덱스: 기본적으로 여러 필드가 빌드됩니다. 하나의 인덱스로 만들고, 열 값의 조합은 고유해야 합니다

5. 인덱싱 기술

1. 인덱스는 NULL 열을 포함하지 않습니다

(1) 열에 NULL 값이 포함되어 있으면 복합 인덱스의 한 열에 NULL 값이 포함되어 있으면 이 열은 일치하는 인덱스에 유효하지 않습니다

2. 가능하면 짧은 인덱스

(1)를 사용하여 문자열을 인덱스합니다. 접두사 길이를 지정해야 합니다. 예를 들어 char(255) 열이 있는 경우 대부분의 값이 처음 10자 또는 20자 내에서 고유한 경우 전체 열을 인덱싱하지 마세요. 짧은 인덱스는 쿼리 속도를 향상시킬 뿐만 아니라 디스크 공간과 I/O 작업을 절약합니다

3. 인덱스 열 정렬

(1) MySQL 쿼리는 하나의 인덱스만 사용하므로 where 절에 인덱스가 사용된 경우 순서대로의 열은 인덱스를 사용하지 않습니다. 따라서 데이터베이스의 기본 정렬이 요구 사항을 충족할 수 있으면 정렬 작업을 사용하지 마십시오. 필요한 경우 이러한 열에 대한 복합 인덱스를 작성하는 것이 가장 좋습니다.

4 .like 문 연산#🎜🎜 #

(1) 일반적으로 like 연산을 사용해야 하는 경우 올바른 사용 방법에 주의하세요. '%aaa%'는 인덱스를 사용하지 않지만 'aaa%'는

5 열에서 작업을 수행하지 않습니다. NOT IN ,<>,을 사용하지 마세요! = 작업이지만 <,<=, =,>,>=, BETWEEN,IN은 인덱스

7을 사용할 수 있습니다. 인덱스는 선택 작업이 자주 수행되는 필드에 설정되어야 합니다.

(1) 이러한 열을 거의 사용하지 않으면 인덱스 유무에 따라 쿼리 속도가 크게 변하지 않기 때문입니다. 반대로 인덱스 추가로 인해 시스템 유지 속도가 감소하고 공간 요구 사항이 증가합니다.

8. 인덱스는 상대적으로 고유한 값을 갖는 필드에 설정되어야 합니다. 텍스트, 이미지, 비트 데이터 유형으로 정의된 열에 추가됩니다. 이러한 열의 데이터 양은 상당히 크거나 값이 매우 적기 때문입니다

10. where 및 Join에 나타나는 열은 색인화되어야 합니다

11. 쿼리 조건 부등호(where 열 != ...)가 있으면 mysql은

12 인덱스를 사용할 수 없습니다. 예: DAY(열) =...), mysql은 인덱스

13을 사용할 수 없습니다(여러 데이터 테이블에서 데이터를 추출해야 하는 경우). 기본 키와 외래 키의 데이터 유형이 동일할 때 인덱스를 사용하십시오. 그렇지 않으면 인덱스가 제 시간에 설정됩니다. 또한

14를 사용하지도 않습니다. explain은 개발자가 SQL 문제를 분석하는 데 도움이 됩니다. mysql이 인덱스를 사용하여 더 나은 인덱스를 선택하고 더 최적화된 내용을 작성하는 데 도움이 되는 select 문 및 조인 테이블을 처리하는 방법 쿼리 문

6. 인덱스 및 잠금

1. 인덱스를 사용하는 경우는 행 잠금이므로, 연산할 데이터는 반드시 잠금을 사용해야 합니다.

(1) 인덱스가 생성되지 않은 경우 데이터 선택이나 위치 지정은 Full Table Scan 형태로 수행되며, 이는 테이블 잠금을 형성하고, 인덱스가 있는 경우 지정된 행(Row)을 직접 찾습니다. 행 잠금. 데이터를 업데이트할 때 인덱스를 사용하지 않으면 전체 테이블이 스캔됩니다. 🎜# 이 내용의 대부분은 제가 일상생활에서 쌓아온 내용입니다. 일부 내용이 불분명하여 인터넷과 책을 참고하였습니다. 양해 부탁드립니다!

관련글:

mysql 인덱스 이름 사용법 및 사용 시기

What 지수인가요? 현재 Mysql에는 여러 가지 주요 인덱스 유형이 있습니다

관련 동영상:

인덱스에 대한 간략한 소개 - MySQL을 안내하는 6일간의 동영상 튜토리얼#🎜 🎜#

위 내용은 mysql 인덱스란 무엇이며 어떻게 사용하나요? 아주 자세하게 정리되어 있어요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.