developer tip

MySQL에서 INDEX, PRIMARY, UNIQUE, FULLTEXT의 차이점은 무엇입니까?

optionbox 2020. 10. 3. 10:33
반응형

MySQL에서 INDEX, PRIMARY, UNIQUE, FULLTEXT의 차이점은 무엇입니까?


MySQL 테이블을 생성 할 때 PRIMARY, UNIQUE, INDEX 및 FULLTEXT의 차이점은 무엇입니까?

어떻게 사용합니까?


차이점

  • KEY 또는 INDEX 는 일반적인 고유하지 않은 인덱스를 나타냅니다. 인덱스에 대해 고유하지 않은 값이 허용되므로 인덱스의 모든 열에 동일한 값 있는 행 이 인덱스에 포함될 있습니다. 이러한 인덱스는 데이터에 어떠한 제한도 적용하지 않으므로 특정 쿼리가 빠르게 실행될 수 있도록하는 데만 사용됩니다.

  • UNIQUE 는 인덱스의 모든 행이 고유해야하는 인덱스를 나타냅니다. 즉, 동일한 행이이 인덱스의 모든 열에 대해 다른 행과 동일한 NULL이 아닌 값을 가질 수 없습니다. 쿼리 속도를 높이는 데 사용될뿐만 아니라 데이터베이스 시스템이 데이터를 삽입하거나 업데이트 할 때이 고유 값 규칙이 깨지는 것을 허용하지 않기 때문에 UNIQUE 인덱스를 사용하여 데이터에 제한을 적용 할 수 있습니다.

    데이터베이스 시스템은 NULL 값을 허용하는 열에 UNIQUE 인덱스를 적용하도록 허용 할 수 있습니다.이 경우 두 행이 모두 NULL 값을 포함하는 경우 두 행이 동일 할 수 있습니다 (여기서는 NULL이 자신과 같지 않은 것으로 간주된다는 이유). 그러나 응용 프로그램에 따라 바람직하지 않을 수 있습니다.이를 방지하려면 관련 열에서 NULL 값을 허용하지 않아야합니다.

  • PRIMARY는 (그리고 거기는 항상 'PRIMARY'라는 이름, 그리고 테이블에 하나있을 수 있습니다 것을 제외하고, 정확하게 UNIQUE 인덱스와 같은 역할을 한다 ; 일부 데이터베이스 시스템이 적용하지 않습니다하지만 항상 하나). PRIMARY 인덱스는 테이블의 모든 행을 고유하게 식별하기위한 기본 수단으로 사용되므로 UNIQUE와 달리 NULL 값을 허용하는 모든 열에 사용해서는 안됩니다. PRIMARY 인덱스는 행을 고유하게 식별하기에 충분한 최소 수의 열에 있어야합니다. 종종 이것은 고유 한 자동 증가 번호를 포함하는 하나의 열이지만 국가 목록의 "국가 코드"와 같이 행을 고유하게 식별 할 수있는 다른 항목이있는 경우 대신 사용할 수 있습니다.

    일부 데이터베이스 시스템 (예 : MySQL의 InnoDB)은 테이블의 레코드를 PRIMARY 인덱스에 나타나는 순서대로 디스크에 저장합니다.

  • FULLTEXT 인덱스는 위의 모든 인덱스와 다르며 데이터베이스 시스템마다 동작이 크게 다릅니다. FULLTEXT 인덱스는 MATCH () / AGAINST () 절로 수행 된 전체 텍스트 검색에만 유용합니다. 위의 세 가지와 달리 일반적으로 b- 트리를 사용하여 내부적으로 구현됩니다 (가장 왼쪽 열부터 선택, 정렬 또는 범위 허용). 해시 테이블 (가장 왼쪽 열부터 선택 가능).

    다른 인덱스 유형이 범용 인 경우 FULLTEXT 인덱스는 좁은 목적을 제공한다는 점에서 전문화됩니다. "전체 텍스트 검색"기능에만 사용됩니다.

유사점

  • 이러한 모든 인덱스에는 둘 이상의 열이있을 수 있습니다.

  • FULLTEXT를 제외하고 열 순서는 중요합니다. 인덱스가 쿼리에 유용하려면 쿼리는 왼쪽부터 시작하는 인덱스의 열을 사용해야합니다. 즉, 두 번째, 세 번째 또는 네 번째 부분 만 사용할 수 없습니다. 인덱스 (정적 값과 일치시키기 위해 인덱스의 이전 열도 사용하지 않는 경우). (FULLTEXT 인덱스가 쿼리에 유용하려면 쿼리 가 인덱스의 모든 열을 사용해야 합니다 .)


이 모든 것은 일종의 인덱스입니다.

primary : 고유해야하며 인덱스이며 물리적 인덱스 (아마도)이며 테이블 당 하나만 가능합니다.

독특 합니다. 이 값의 튜플이있는 행을 두 개 이상 가질 수 없습니다. 고유 키가 둘 이상의 열에있을 수 있기 때문에 인덱스의 각 개별 열이 고유하다는 의미는 아니지만 이러한 열의 각 값 조합이 고유하다는 것을 의미합니다.

인덱스 : 기본 또는 고유하지 않은 경우 테이블에 삽입 된 값을 제한하지 않지만보다 효율적으로 조회 할 수 있습니다.

fulltext : 전체 텍스트 검색을 허용하는보다 전문화 된 인덱싱 형식입니다. 지정된 열의 각 "단어"에 대한 "인덱스"를 (본질적으로) 생성하는 것으로 생각하십시오.


나는 이것이 다음을 제외하고는 잘 다루어 진 것 같다.

  • 단순 KEY/ INDEX(또는라고도 함 SECONDARY INDEX) 선택성이 충분하면 성능이 향상됩니다. 이 문제에 대해 일반적인 권장 사항은 인덱스가 적용된 결과 집합의 레코드 양이 상위 테이블의 총 레코드 양의 20 %를 초과하면 인덱스가 무효화된다는 것입니다. 실제로 각 아키텍처는 다르지만 아이디어는 여전히 옳습니다.

  • 보조 인덱스 (그리고 mysql에 매우 특정한)는 기본 키와 완전히 분리 된 다른 객체로 간주되어서는 안됩니다. 사실, 둘 다 공동으로 사용해야하며이 정보가 알려지면 mysql DBA에 추가 도구를 제공해야합니다. Mysql에서 인덱스는 기본 키를 포함합니다. 특히 거기에 설명 된 것과 같은 암시 적 커버링 인덱스를 영리하게 구축 할 때 상당한 성능 향상을 가져옵니다.

  • 데이터가이어야한다고 생각 UNIQUE되면 고유 색인을 사용하십시오. 선택 사항이라고 생각할 수 있으며 (예 : 애플리케이션 수준에서 작업) 일반 인덱스가 수행 할 것이라고 생각할 수 있지만 실제로는 Mysql이 각 행이 고유하다는 보장을 나타내며 부수적으로 성능 이점을 제공합니다.

  • Innodb (MySQL 5.6.4 이상) 및 Myisam 엔진 에서만 사용할 수 있습니다 FULLTEXT(또는 그렇지 않으면라고 함 SEARCH INDEX).

  • 당신은 사용할 수 FULLTEXTCHAR, VARCHARTEXT열 유형
  • FULLTEXT인덱스는 단순히 인덱스를 만드는 것 이상을 포함합니다. 생성 된 많은 시스템 테이블, 완전히 분리 된 캐싱 시스템 및 일부 특정 규칙 및 최적화가 적용됩니다. 참조 http://dev.mysql.com/doc/refman/5.7/en/fulltext-restrictions.htmlhttp://dev.mysql.com/doc/refman/5.7/en/innodb-fulltext-index.html

참고 URL : https://stackoverflow.com/questions/707874/differences-between-index-primary-unique-fulltext-in-mysql

반응형