무엇이 데이터베이스 인덱스입니까?
데이터베이스 인덱스란?
다음 사용자 테이블을 고려하십시오.Sam이라는 이름을 가진 모든 사용자를 찾으려면 테이블의 각 행이 일치하는지 확인해야 합니다.비록 이것은 작은 시계에 문제가 되지는 않지만, 시계가 증가함에 따라 검색 속도는 점점 느려질 것이다.
신분증
성함
1
마르트
2
자크
셋
미아
4
샘
5
엠마
6
케이트
7
앤디
8
닉네임
"이름"열을 정렬하면 검색 속도가 훨씬 빨라집니다.그런 다음 binary search를 사용하여 데이터를 더 적게 찾고 더 빨리 찾을 수 있습니다.
이것이 바로 데이터베이스 인덱스가 한 일입니다!그것들은 열 값을 B-tree에 저장하여 2진법 검색을 사용하여 열을 검색할 수 있다.
색인은 열로 만든 것이지 표로 만든 것이 아니다.트리의 각 노드는 정렬된 열의 값과 테이블 데이터의 나머지 부분을 가리키는 바늘을 저장합니다.바늘의 용도는 색인에서 이 데이터를 복사하지 않고 검색을 줄 데이터로 되돌려 주는 것이다.
예를 들어 이름 열의 인덱스에는 다음과 같은 B 트리 인덱스가 있습니다.
조회하다
SELECT * FROM users WHERE first_name='Sam';
실행할 때 데이터베이스에서 색인을 사용하여 샘이라는 모든 줄을 찾을 수 있습니다. 이전에 우리는 테이블의 모든 줄을 검사해야 합니다. 이것은 선형 시간이 필요합니다.평형 B 트리를 사용하면 대수 시간 내에 트리를 검색할 수 있습니다.수백만 개의 기록이 있는 표에서 색인은 조회 속도를 높이는 데 매우 도움이 된다.색인은 언제 만듭니까?
테이블의 모든 열에 색인을 작성하기를 원할 수도 있지만, 데이터베이스 색인은 대가가 있습니다.색인 열을 검색하는 속도가 더 빠르지만, 테이블과 색인을 동시에 업데이트해야 하기 때문에, 테이블을 수정하는 시간이 더 길다.또한 인덱스 자체를 저장하기 위해 디스크 공간을 사용해야 한다.이것이 바로 모든 필드에 색인을 만들고 싶지 않은 이유입니다.반대로 조회의 응답 시간을 분석하고 조회 속도가 예상보다 낮을 때만 색인을 적용해야 한다.보통 검색된
WHERE
자구에 나타나는 대형 테이블의 열에 색인을 만듭니다.이 열들은 선별표의 근거이기 때문에, 빠른 검색을 원합니다.색인이 유용한 다른 경우, 하나의 열이 유일한 제약을 가지고 있다는 것이다.열에 새 값을 추가할 때마다 이 열이 이 값을 포함하지 않았는지 확인해야 합니다.열을 인덱스하면 검색 속도가 훨씬 빨라집니다.사실 MySQL에서는 열에 고유한 구속조건을 추가하면 자동으로 고유한 색인이 만들어집니다.
마찬가지로 색인 키 열을 사용하면 키 관계를 관리하기 쉽다.외부 키 테이블의 데이터를 업데이트하거나 삭제할 때, 인덱스는 외부 키를 인용하는 줄을 찾기가 더욱 쉽습니다.
다중 색인
다중 열 색인도 만들 수 있습니다.데이터 정렬을 구분할 수 있는 열이 부족할 때, 이것은 매우 유용하다.이름과 성씨에 따라 사용자를 찾고 있다고 가정하십시오.만약 여러 사용자의 이름이 같다면, 이 사용자를 찾으려면, 성순으로 검색해야 합니다.
이 예에서는
first_name
및 last_name
필드에 다음 그림과 같이 여러 열 색인을 만들려고 합니다.CREATE INDEX test ON users(first_name, last_name);
이렇게 하면 두 값으로 정렬된 B 트리가 생성됩니다.우선, 이름에 따라 정렬하고, 같은 이름의 값을 가진 줄에 대해서는 성씨에 따라 정렬합니다.여러 사용자가 한 이름을 공유하더라도 이름과 성씨에 따라 사용자를 찾을 수 있습니다.열의 순서는 색인에서 정렬하는 순서와 완전히 같다는 것을 주의하십시오.따라서 색인을 만들 때 열의 순서가 중요하다.
그 밖에 다열 인덱스는 많은 단열 인덱스와 다르다.우리의 다열 인덱스는 두 열을 동시에 포함하거나 이름열만 포함하는 검색에 매우 유용합니다.만약 성씨만 조회한다면 그것은 쓸모가 없다.먼저 이름에 따라 데이터를 정렬하기 때문에, 성씨로만 검색할 때 색인을 사용할 수 없습니다.이 때문에, 가장 자주 조회하는 열을 첫 번째로 놓아야 합니다.
도구책
Reference
이 문제에 관하여(무엇이 데이터베이스 인덱스입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/veerpalb/what-is-a-database-index-1j9h텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)