전체 텍스트 쿼리의 성능 향상

적용 대상:SQL ServerAzure SQL 데이터베이스Azure SQL Managed Instance

다음 권고 목록은 전체 텍스트 쿼리의 성능을 향상시키는 데 도움이 될 수 있습니다.

메모리, 디스크 속도, CPU 속도, 머신 아키텍처와 같은 하드웨어 자원이 전체 텍스트 쿼리의 성능에 영향을 미칠 수 있습니다.

  • ALTER INDEX REORGANIZE를 사용하여 기본 테이블의 인덱스 조각 모음을 수행합니다.

  • REORGANIZE를 사용하여ALTER FULLTEXT CATALOG 전체 텍스트 카탈로그를 다시 구성합니다. 전체 텍스트 인덱스 조각이 너무 많으면 쿼리 성능이 크게 저하될 수 있습니다. 이 문장은 인덱스당 모든 조각을 하나의 더 큰 조각으로 병합하여 모든 오래된 발생 정보를 제거합니다. 성능 테스트 전에 이 문장을 실행하세요. 이 문장을 실행하면 해당 카탈로그의 전체 텍스트 인덱스가 마스터 병합됩니다.

  • 전체 텍스트 키 열을 작은 열로 제한합니다. 900바이트 열을 지원하지만, 전체 텍스트 인덱스에서는 더 작은 키 열을 사용하세요. int 및 bigint 는 최상의 성능을 제공합니다.

  • 정수 전체 텍스트 키를 사용하면 docid 매핑 테이블과의 결합을 피하여 쿼리 및 크롤 성능을 향상시킵니다. 전체 텍스트 키가 클러스터 인덱스 키일 경우 추가 성능 향상이 가능합니다.

  • 여러 CONTAINS 술어를 하나의 CONTAINS 술어로 결합합니다. SQL Server에서는 쿼리의 CONTAINS 열 목록을 지정할 수 있습니다.

  • 전체 텍스트 키 또는 순위 정보만 필요한 경우에는 각각 CONTAINS 또는 FREETEXT 대신 CONTAINSTABLE 또는 FREETEXTTABLE을 사용하세요.

  • 결과를 제한하고 성능을 높이기 위해 and 함수의 FREETEXTTABLECONTAINSTABLE 매개변수를 사용하세요. top_n_by_rank를 사용하면 가장 관련성 높은 결과만 가져올 수 있습니다. 비즈니스 시나리오에서 가능한 모든 검색 결과를 찾아내야 할 필요가 없는 경우(즉, 완전 재현율이 필요하지 않은 경우)에만 이 매개변수를 사용하세요.

    참고

    재현율은 일반적으로 법적 환경에서는 반드시 필요하지만, 전자상거래와 같은 비즈니스 환경에서는 성능만큼 중요하지 않을 수 있습니다.

  • 전체 텍스트 쿼리 계획을 확인하여 적절한 조인 계획이 선택되었는지 확인합니다. 조인 힌트 또는 쿼리 힌트를 사용해야 하는 경우 사용합니다. 전체 텍스트 쿼리에서 매개 변수를 사용하는 경우 매개 변수의 처음 값에 따라 쿼리 계획이 결정됩니다. OPTIMIZE FOR를 사용해 쿼리가 원하는 값으로 컴파일되도록 강제할 수 있습니다. 이를 통해 결정적 쿼리 계획을 달성하고 성능을 향상할 수 있습니다.

  • 전체 텍스트 검색에서 지정된 CONTAINSTABLE (AND, OR) 논리 연산자는 Transact-SQL 조인으로 구현되거나 전체 텍스트 실행 스트리밍 테이블 값 함수(STVF) 내에서 구현될 수 있습니다. 일반적으로 논리 연산자 유형이 하나만 있는 쿼리는 순수하게 전체 텍스트 실행으로 구현되며, 논리 연산자가 혼합된 쿼리는 SQL 조인을 포함합니다. 전체 텍스트 실행 STVF 내 논리 연산자 구현에는 SQL 조인보다 실행 속도가 빠른 일부 특수한 인덱스 속성이 사용됩니다. 이 때문에 가능한 경우 단일 유형의 논리 연산자만을 사용하여 쿼리를 구성하세요.

  • 선택적 관계형 술어를 포함하는 애플리케이션의 경우, 선택적 관계형 술어와 비선택적 전체 텍스트 술어를 사용하는 쿼리는 쿼리 옵티마이저를 사용하도록 작성될 때 가장 좋은 성능을 낼 수 있습니다. 이 접근 방식은 쿼리 옵티마이저가 효과적인 쿼리 계획을 생성하기 위해 조건자 푸시다운 또는 범위 푸시다운을 활용할 수 있는지 여부를 판단할 수 있게 합니다. 이 방법은 관계형 데이터를 전체 텍스트 데이터로 인덱싱하는 것보다 더 간단하고 종종 더 효율적입니다.

SQL Server 2008 전문 검색: 내부 구조 및 기능 향상