MySQL (B-Tree, FullText, Spatial, Hash)의 다양한 유형의 인덱스는 무엇입니까? MySQL은 여러 데이터 유형 및 쿼리 패턴에 최적화 된 여러 인덱스 유형을 제공합니다. 가장 일반적인 것은 다음과 같습니다. B-Tree Indexes : 이것은 기본이자 가장 다재다능한 인덱스 유형입니다. B- 트리 인덱스는 효율적인 검색, 삽입 및 삭제를 가능하게하는 방식으로 데이터를 구성하는 트리와 같은 데이터 구조입니다. 그들은 평등, 범위 및 와일드 카드 검색에 이상적입니다 (선행 와일드 카드와 LIKE 사용). 둘 다 = , > , , >= , , BETWEEN , IN , LIKE (Leading WildCard) 사이에서 모두를 지원하며 IS NULL . 기본적으로 주문할 수있는 모든 비교는 B- 트리 인덱스와 잘 어울립니다. 일반적인 MySQL 데이터베이스의 대부분의 인덱스는 B-Tree 인덱스입니다. FullText Indexes : 이 인덱스는 텍스트 데이터를 검색하도록 특별히 설계되었습니다. 부울 작업 (및 NOT), 문구 검색, 근접 검색 및 와일드 카드 검색 (B-Tree 인덱스와 달리 후행 와일드 카드 포함)을 포함한 강력한 전체 텍스트 검색을 허용합니다. 전체 텍스트 인덱스는 효율적인 텍스트 검색이 중요한 검색 엔진 또는 문서 데이터베이스와 같은 응용 프로그램에 특히 유용합니다. 그들은 일반적으로 TEXT 또는 VARCHAR 차르 열에서 만들어집니다. InnoDB의 전체 텍스트 인덱스는 별도의 스토리지 엔진을 사용하며 MyISAM과 다르며 종종 훨씬 빠릅니다. 공간 인덱스 : 이러한 인덱스는 점, 라인 및 다각형과 같은 공간 데이터를 효율적으로 쿼리하는 데 사용됩니다. 그것들은 R- 트리 (또는 그 변형)를 기반으로하며, 근접성, 교차 및 격리와 같은 공간 관계를 효율적으로 처리하도록 설계되었습니다. 공간 인덱스는 일반적으로 지리 정보 시스템 (GIS) 및 위치 기반 데이터를 다루는 기타 응용 프로그램에서 사용됩니다. POINT , LINESTRING , POLYGON 등과 같은 공간 데이터 유형의 열에서 생성됩니다. 해시 인덱스 : 이 인덱스는 해시 함수를 사용하여 키를 해당 데이터 위치에 매핑합니다. 정확한 일치에 대한 매우 빠른 조회를 제공하지만 불평등 비교와 관련된 범위 쿼리 또는 쿼리에는 적합하지 않습니다. 이 제한으로 인해 해시 인덱스는 MySQL에서 거의 사용되지 않습니다. 그들은 InnoDB 저장 엔진에서 지원되지 않습니다. MySQL 테이블의 올바른 색인 유형을 어떻게 선택합니까? 올바른 인덱스 유형을 선택하는 것은 인덱싱중인 데이터 유형과 수행 할 쿼리 유형에 크게 좌우됩니다. 숫자 또는 문자열 데이터에 대한 평등, 범위 및 주요 와일드 카드 검색과 관련된 대부분의 쿼리의 경우 B- 트리 인덱스가 최적의 선택입니다. 그들의 다양성과 광범위한 적용 가능성은 다른 인덱스 유형에 대한 특정 요구가 존재하지 않는 한 기본값과 일반적으로 최상의 옵션이됩니다. 텍스트 데이터에서 전체 텍스트 검색을 수행 해야하는 경우 FullText 인덱스를 사용하십시오. 이렇게하면 B-Tree 인덱스 사용에 비해 검색 쿼리의 성능이 크게 향상됩니다. 공간 데이터 (지리적 좌표, 모양 등)로 작업하는 경우 공간 색인이 필요합니다. 공간 색인이 없으면 공간 쿼리가 매우 느릴 수 있습니다. 정확한 일치에 대해 매우 빠른 조회가 필요한 매우 구체적인 사용 사례가없고 범위 쿼리가 필요하지 않은 경우 해시 인덱스 사용을 피하십시오. 그들의 한계는 일반적으로 대부분의 실제 시나리오에서 속도 이점을 능가합니다. MySQL에서 다른 인덱스 유형을 사용하는 성능은 무엇입니까? 성능 영향은 인덱스 유형과 쿼리에 따라 크게 다릅니다. B- 트리 인덱스는 일반적으로 광범위한 쿼리에 대한 우수한 성능을 제공합니다. MySQL이 결과를 찾기 위해 검사 해야하는 행의 수를 크게 줄여서 쿼리 실행이 더 빠릅니다. 전체 텍스트 인덱스는 전체 텍스트 검색 속도를 높입니다. 그것들이 없으면, 전체 텍스트 검색은 특히 대형 데이터 세트에서 매우 느릴 수 있습니다. 공간 인덱스는 효율적인 공간 쿼리에 필수적입니다. 그것들이 없으면 공간 쿼리는 순서가 느릴 수 있습니다. 해시 인덱스는 정확히 일치하는 데 매우 빠른 조회를 제공하지만 다른 것은 사용할 수 없습니다. 그들의 성능 이점은 좁은 사용 사례로 제한됩니다. 부적절한 사용은 전체 테이블 스캔으로 이어질 수 있습니다. 일반적으로 적절한 인덱스 유형을 사용하면 쿼리 성능이 크게 향상됩니다. 그러나 선택되지 않거나 과도한 인덱스는 실제로 인덱스 자체를 유지하는 오버 헤드로 인해 성능을 줄일 수 있습니다. MySQL에서 각 인덱스 유형의 한계는 무엇입니까? 각 인덱스 유형에는 자체 제한 사항이 있습니다. B-Tree Indexes : 다재다능하지만, 많은 비율의 테이블을 검사 해야하는 쿼리에 대해서는 잘 작동하지 않습니다 (예 : 조항이있는 곳에서 매우 느슨한 WHERE ). 또한 조항 LIKE 후행 와일드 카드 검색을 효율적으로 지원하지 않습니다. FullText Indexes : 텍스트 데이터에 특화되어 있으며 다른 데이터 유형에서는 작동하지 않습니다. 인덱스 된 열에서 간단한 평등 비교를 위해 B- 트리 색인만큼 효율적이지 않을 수 있습니다. 사용 가능한 기능은 또한 저장 엔진 (MyISAM vs. InnoDB)에 따라 다릅니다. 공간 인덱스 : 생성 및 유지 관리가 계산적으로 비싸며 공간 쿼리에만 유용합니다. 동일한 열의 비 공간 쿼리에 대한 B-Tree 인덱스보다 효율적이지 않을 수 있습니다. 해시 색인 : 가장 큰 한계는 불평등 비교와 관련된 범위 쿼리 또는 쿼리를 처리 할 수 없다는 것입니다. 또한 가장 일반적으로 사용되는 저장 엔진 인 Innodb는 지원하지 않습니다. 이것은 적용 가능성을 크게 제한합니다.