Docs Menu
Docs Home
/
데이터베이스 매뉴얼
/ / /

자체 관리 배포에서 스캔되는 텍스트 인덱스 항목 수 제한

대규모 데이터 세트에서 텍스트 검색 쿼리를 수행하는 경우, 단일 필드 텍스트 인덱스가 많은 수의 항목을 스캔하여 결과를 반환할 수 있으므로 쿼리 속도가 느려질 수 있습니다.

쿼리 성능을 향상시키려면 복합 텍스트 인덱스 를 만들고 텍스트 검색 쿼리에 동등성 매치 를 포함할 수 있습니다. 복합 인덱스 에 동등성 매치 에 사용된 필드 가 포함되어 있으면 인덱스 는 더 적은 수의 항목을 스캔하고 결과를 더 빠르게 반환합니다.

이 예에서 매장 관리자는 inventory 이러한 문서가 포함된 collection을 쿼리합니다.

db.inventory.insertMany( [
{ _id: 1, department: "tech", description: "lime green computer" },
{ _id: 2, department: "tech", description: "wireless red mouse" },
{ _id: 3, department: "kitchen", description: "green placemat" },
{ _id: 4, department: "kitchen", description: "red peeler" },
{ _id: 5, department: "food", description: "green apple" },
{ _id: 6, department: "food", description: "red potato" }
] )

관리자는 특정 부서 내의 항목에 대한 텍스트 검색 쿼리를 수행합니다.

departmentdescription 필드의 복합 텍스트 인덱스는 스캔한 인덱스 키를 지정된 department 내의 문서로만 제한합니다. 복합 텍스트 인덱스는 description 필드의 단일 필드 텍스트 인덱스에 비해 향상된 성능을 제공합니다.

다음 필드를 포함하는 inventory 컬렉션에 복합 인덱스를 생성합니다.

  • department 필드의 오름차순 또는 내림차순 인덱스 키

  • description 필드의 text 인덱스 키

db.inventory.createIndex(
{
department: 1,
description: "text"
}
)

복합 인덱스를 생성하면 텍스트 검색 쿼리는 department 필드에서 지정된 동일성 조건과 일치하는 문서만 검색합니다.

예를 들어, 다음 쿼리는 description 필드에 green 문자열이 포함된 departmentkitchen이 동일한 문서를 스캔합니다.

db.inventory.find( { department: "kitchen", $text: { $search: "green" } } )

출력:

[ { _id: 3, department: 'kitchen', description: 'green placemat' } ]

쿼리를 반환하기 위해 스캔된 문서 수를 확인하려면 쿼리의 executionStats를 참조하세요.

db.inventory.find(
{
department: "kitchen", $text: { $search: "green" }
}
).explain("executionStats")

검사한 인덱스 키의 수는 totalKeysExamined 필드에 표시됩니다. 더 많은 인덱스 키를 검사하는 쿼리는 일반적으로 완료하는 데 시간이 더 오래 걸립니다.

departmentdescription에 복합 인덱스가 있는 경우 쿼리는 하나의 인덱스 키만 검사합니다. 컬렉션에서 departmentkitchen이고 descriptiongreen 문자열이 포함된 문서가 하나만 있습니다.

그러나 쿼리가 description 필드에서만 단일 필드 텍스트 인덱스를 사용한 경우 쿼리는 인덱스 키를 세 개 검사합니다. 컬렉션에는 description 필드에 문자열 green (이)가 포함된 문서가 세 개 있습니다.

앞의 예시에서 사용된 것과 같은 작은 컬렉션에서는 단일 필드 인덱스와 복합 텍스트 인덱스 간에 성능에 눈에 띄는 차이가 없습니다. 그러나 더 큰 컬렉션에서는 인덱스 항목 스캔이 증가하면 성능이 눈에 띄게 저하될 수 있습니다. 최상의 성능을 위해 동등성 매치에 가장 잘 맞도록 스캔되는 인덱스 항목 수를 제한하는 텍스트 인덱스를 만드세요.

돌아가기

가중치 할당

이 페이지의 내용