전체 텍스트 쿼리의 성능 튜닝 및 최적화
전체 텍스트 쿼리의 성능은 메모리, 디스크 속도, CPU 속도 및 컴퓨터 아키텍처와 같은 하드웨어 리소스의 영향을 받습니다.
전체 텍스트 쿼리 성능 향상을 위한 권장 사항
다음은 전체 텍스트 쿼리 성능 향상에 도움이 될 권장 사항 목록입니다.
ALTER INDEX REORGANIZE를 사용하여 기본 테이블의 인덱스를 조각 모음합니다.
ALTER FULLTEXT CATALOG REORGANIZE를 사용하여 전체 텍스트 카탈로그를 다시 구성합니다. 이 문을 실행하면 해당 카탈로그에 있는 전체 텍스트 인덱스의 마스터 병합이 수행되므로 성능 테스트 전에 실행해야 합니다.
작은 열을 전체 텍스트 키 열로 선택합니다. 900바이트 열이 지원되지만 전체 텍스트 인덱스에서는 비교적 작은 키 열을 사용하는 것이 좋습니다. int 및 bigint는 최적의 성능을 제공합니다.
정수 전체 텍스트 키를 사용하면 docid 매핑 테이블과의 조인이 방지됩니다. 따라서 정수 전체 텍스트 키는 작업량을 줄여 쿼리 성능을 높이고 탐색 성능을 개선합니다. 전체 텍스트 키가 클러스터형 인덱스 키인 경우에도 또 다른 성능 이점을 얻을 수 있습니다. 자세한 내용은 전체 텍스트 인덱스 구조 및 방법: 전체 텍스트 키 열 조회(Transact-SQL)를 참조하십시오.
여러 CONTAINS 조건자를 하나의 CONTAINS 조건자에 결합합니다. SQL Server에서는 CONTAINS 쿼리에 열 목록을 지정할 수 있습니다.
전체 텍스트 키 또는 순위 정보만 필요한 경우 CONTAINS 또는 FREETEXT를 사용하는 대신 CONTAINSTABLE 또는 FREETEXTTABLE을 각각 사용합니다.
결과를 제한하고 성능을 향상시키려면 FREETEXTTABLE 및 CONTAINSTABLE 함수의 top_n_by_rank 매개 변수를 사용합니다. top_n_by_rank를 사용하면 관련성이 가장 높은 항목만 회수할 수 있습니다. 이 매개 변수는 비즈니스 시나리오에서 일치하는 모든 항목을 회수하지 않아도 되는 경우, 즉 전체 회수가 필요 없는 경우에만 사용합니다.
[!참고]
전체 회수는 대개 법률 시나리오에 필요하지만 e-비즈니스와 같은 비즈니스 시나리오에서는 성능보다 중요하지 않을 수 있습니다.
전체 텍스트 쿼리 계획을 검사하여 적절한 조인 계획이 선택되었는지 확인합니다. 필요한 경우 조인 힌트 또는 쿼리 힌트를 사용합니다. 전체 텍스트 쿼리에서 매개 변수가 사용될 경우 매개 변수의 첫 번째 값이 쿼리 계획을 결정합니다. OPTIMIZE FOR 쿼리 힌트를 사용하여 쿼리를 원하는 값으로 컴파일하도록 지정할 수 있습니다. 이렇게 하면 결정적 쿼리 계획 및 향상된 성능을 실현하는 데 도움이 됩니다.
전체 텍스트 인덱스에 전체 텍스트 인덱스 조각이 너무 많으면 쿼리 성능이 크게 저하될 수 있습니다. 조각 수를 줄이려면 ALTER FULLTEXT CATALOGTransact-SQL 문의 REORGANIZE 옵션을 사용하여 전체 텍스트 카탈로그를 다시 구성합니다. 이 문은 기본적으로 모든 조각을 비교적 큰 하나의 조각으로 병합하고 전체 텍스트 인덱스에서 사용되지 않는 항목을 모두 제거합니다.
SQL Server 2008 전체 텍스트 검색에서 CONTAINSTABLE에 지정되는 논리 연산자(AND, OR)는 SQL 조인으로 구현하거나 전체 텍스트 실행 STVF(스트리밍 테이블 반환 함수) 내에서 구현할 수 있습니다. 일반적으로 한 가지 논리 연산자만 포함된 쿼리는 전체 텍스트 실행으로만 구현되는 데 반해 논리 연산자가 혼합되어 있는 쿼리는 SQL 조인도 포함합니다. 전체 텍스트 실행 STVF 내 논리 연산자 구현에는 SQL 조인보다 실행 속도가 빠른 일부 특수한 인덱스 속성이 사용됩니다. 따라서 가능하면 단일 유형의 논리 연산자만 사용하여 쿼리를 작성하는 것이 좋습니다.
선택적 관계 조건을 포함하는 응용 프로그램의 경우 선택적 관계 조건자와 비선택적 전체 텍스트 조건자를 사용하는 쿼리는 쿼리 최적화 프로그램을 사용하도록 작성되었을 때 최상의 성능을 발휘할 수 있습니다. 이렇게 하면 쿼리 최적화 프로그램이 효과적인 쿼리 계획을 생성하기 위해 조건자나 범위 축소 중 어느 것을 이용할지 결정할 수 있습니다. 이러한 방식은 관계형 데이터를 전체 텍스트 데이터로 인덱싱하는 것보다 간단하고 효율적일 때가 많습니다.
단어 분리기, 동의어 사전 및 중지 목록 조합의 토큰화 결과 보기
쿼리 문자열 입력에 특정 단어 분리기, 동의어 사전 및 중지 목록 조합을 적용하면 sys.dm_fts_parser 동적 관리 뷰를 사용하여 토큰화 결과를 볼 수 있습니다. 자세한 내용은 sys.dm_fts_parser(Transact-SQL)를 참조하십시오.