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

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

다음 권장 사항 목록은 전체 텍스트 쿼리의 성능을 향상시키는 데 도움이 됩니다.

전체 텍스트 쿼리의 성능은 메모리, 디스크 속도, CPU 속도 및 머신 아키텍처와 같은 하드웨어 리소스의 영향을 받습니다.

  • ALTER INDEX REORGANIZE를 사용하여 기본 테이블의 인덱스 조각 모음

  • ALTER FULLTEXT CATALOG REORGANIZE를 사용하여 전체 텍스트 카탈로그를 다시 구성합니다. 이 문을 실행하면 해당 카탈로그의 전체 텍스트 인덱스가 마스터 병합되므로 성능 테스트 전에 이 작업을 수행해야 합니다.

  • 전체 텍스트 키 열을 작은 열로 제한합니다. 900 바이트 열이 지원되지만 전체 텍스트 인덱스로 더 작은 키 열을 사용하는 것이 좋습니다. intbigint 는 최상의 성능을 제공합니다.

  • 정수 전체 텍스트 키를 사용하면 docid 매핑 테이블과의 조인을 방지할 수 있습니다. 따라서 정수 전체 텍스트 키는 크기 순으로 쿼리 성능을 향상시키고 크롤링 성능을 향상시킵니다. 전체 텍스트 키도 클러스터형 인덱스 키인 경우 성능상의 이점이 더 높아질 수 있습니다.

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

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

  • 결과를 제한하고 성능을 향상시키려면 FREETEXTTABLE 및 CONTAINSTABLE 함수의 top_n_by_rank 매개 변수를 사용합니다. top_n_by_rank 가장 관련성이 큰 적중만 회수할 수 있습니다. 이 매개 변수는 비즈니스 시나리오에서 가능한 모든 적수(즉, 총 회수가 필요하지 않음)를 회수할 필요가 없는 경우에만 사용합니다.

    참고 항목

    전체 회수는 대개 법률 시나리오에 필요하지만 e-비즈니스와 같은 비즈니스 시나리오에서는 성능보다 중요하지 않을 수 있습니다.

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

  • 전체 텍스트 인덱스에 전체 텍스트 인덱스 조각이 너무 많을 경우 쿼리 성능이 크게 저하됩니다. 조각 수를 줄이려면 ALTER FULLTEXT CATALOG Transact-SQL 문의 REORGANIZE 옵션을 사용하여 전체 텍스트 카탈로그를 다시 구성합니다. 이 문은 기본적으로 모든 조각을 더 큰 단일 조각으로 병합하고 전체 텍스트 인덱스에서 사용되지 않는 모든 항목을 제거합니다.

  • 전체 텍스트 검색에서 CONTAINSTABLE에 지정되는 논리 연산자(AND, OR)는 SQL 조인으로 구현하거나 전체 텍스트 실행 STVF(스트리밍 테이블 반환 함수) 내에서 구현할 수 있습니다. 일반적으로 한 가지 유형의 논리 연산자만 있는 쿼리는 전체 텍스트 실행에 의해서만 구현되는 반면 논리 연산자를 혼합하는 쿼리는 SQL 조인도 보유합니다. 전체 텍스트 실행 STVF 내 논리 연산자 구현에는 SQL 조인보다 실행 속도가 빠른 일부 특수한 인덱스 속성이 사용됩니다. 이러한 이유로 가능한 경우 단일 유형의 논리 연산자만 사용하여 쿼리를 구성하는 것이 좋습니다.

  • 선택적 관계 조건자가 포함된 애플리케이션의 경우 선택적 관계형 조건자와 선택되지 않은 전체 텍스트 조건자를 사용하는 쿼리는 쿼리 최적화 프로그램을 사용하도록 작성될 때 가장 잘 수행될 수 있습니다. 이렇게 하면 쿼리 최적화 프로그램이 효과적인 쿼리 계획을 생성하기 위해 조건자나 범위 축소 중 어느 것을 이용할지 결정할 수 있습니다. 이 방법은 관계형 데이터를 전체 텍스트 데이터로 인덱싱하는 것보다 더 간단하고 종종 더 효율적입니다.

SQL Server 2008 전체 텍스트 검색: 내부 및 향상된 기능

참고 항목

sys.dm_fts_memory_buffers(Transact-SQL)
sys.dm_fts_memory_pools(Transact-SQL)