전체 텍스트 색인화를 사용해야 하는 경우는 언제입니까?
고객, 고객 등을 "검색"하는 수많은 쿼리가 있습니다.이름, 이메일 등으로 검색할 수 있습니다.우리는 다음과 같은 방식으로 LIKE 문을 사용합니다.
SELECT *
FROM customer
WHERE fname LIKE '%someName%'
전체 텍스트 인덱싱이 시나리오에서 도움이 됩니까?SQL Server 2005를 사용하고 있습니다.
DBMS에 따라 다릅니다. 전체 텍스트 기능을 사용하지 않는 한 대부분의 시스템은 전체 텍스트 색인을 활용하지 못할 것입니다.(예: mySQL의 MATCH/AGONST 또는 MS SQL의 FREETEXT/CONTAINES)
다음은 SQL Server에서 전체 텍스트 인덱싱을 사용하는 시기, 이유 및 방법에 대한 두 가지 좋은 기사입니다.
FTS는 이 시나리오에서 도움이 될 수 있습니다. 문제는 가치가 있느냐 없느냐입니다.
왜 그런지 살펴보도록 하겠습니다.LIKE가장 효과적인 검색이 아닐 수 있습니다.를 할 때LIKE ▁you▁할 때.%비교를 시작할 때 SQL Server는 모든 행에 대한 테이블 검색과 확인 중인 열의 바이트별 검사를 모두 수행해야 합니다.
FTS는 이름의 변화에 대한 더 나은 통계와 마찬가지로 데이터를 일치시키기 위한 더 나은 알고리즘을 가지고 있습니다.따라서 FTS는 Smith를 찾을 때 Smith, Smythe, Smithers 등을 일치시키는 데 더 나은 성능을 제공할 수 있습니다.
FTS를FTS를 해야 하기 더 복잡합니다. 마스터해야 하기 때문입니다.CONTAINS 대FREETEXT그리고 검색의 난해한 형식입니다.그러나 FName 또는 LName이 일치하는 검색을 수행하려면 OR 대신 하나의 문으로 검색할 수 있습니다.
FTS가 효과적인지 여부를 확인하려면 데이터 양을 확인합니다.에서 FTS를 하는데, 저는수개있데이이다 FTS를서용으로 입니다. 이는 검색을 통해 얻을 수 있는 실질적인 이점입니다.LIKE하지만 모든 테이블에서 사용하지는 않습니다.
테이블 크기가 수백만 개 미만으로 합리적인 경우 검색할 각 열에 대한 인덱스를 만들어 유사한 속도를 얻을 수 있으며 SQL Server는 테이블 검색 대신 인덱스 검색을 수행해야 합니다.
내 테스트 시나리오에 따르면:
- SQL Server 2008
- 각각 10.000.000개의 행과 "단어 A 단어 B 단어 C..."와 같은 문자열(1~30개의 단어 사이에서 다름)
- Contains(열, "단어 B")를 사용하여 count(*) 선택
- 결과의 크기는 수십만.
- 카탈로그 크기 약 1.8GB
전체 텍스트 색인은 2초 범위인 반면 '% wordB %'는 1-2분 범위입니다.
그러나 이것은 추가 선택 기준을 사용하지 않는 경우에만 중요합니다! 예를 들어 기본 키 열에 "예: 'prefix%'를 추가로 사용한 경우 일부 필드에서 문자열 검색을 수행하는 것보다 전체 텍스트 인덱스로 이동하는 작업에 더 많은 비용이 들기 때문에 성능이 저하되었습니다.
따라서 "자유 문자열 검색"을 수행하거나 일부 특수 기능을 사용해야 하는 경우에만 전체 텍스트 색인을 사용하는 것이 좋습니다.
MSSQL에 대한 질문에 대답하기 위해 전체 텍스트 인덱싱은 시나리오에서 도움이 되지 않습니다.
이 쿼리를 개선하기 위해 다음 중 하나를 수행할 수 있습니다.
- 열에 전체 텍스트 카탈로그를 구성하고 CONTINES() 기능을 사용합니다.
접두사(예: 이름의 시작부터 일치)를 사용하여 기본적으로 검색하는 경우, 술어를 다음과 같이 변경하고 열 위에 인덱스를 만들 수 있습니다.
여기서 fname은 'slot%'와 같습니다.
쿼리의 성능이 큰 문제가 아닌 이상 이에 대한 오버킬일 수 있습니다.
언급URL : https://stackoverflow.com/questions/57918/when-should-you-use-full-text-indexing
'programing' 카테고리의 다른 글
| 파일 이름 Powershell의 일부 바꾸기 (0) | 2023.08.15 |
|---|---|
| Weblogic 배포 예외: 패딩 예외:패딩 해제를 수행할 수 없습니다. 잘못된 패드 바이트입니다. (0) | 2023.08.15 |
| MySQL을 사용하여 외부 키로 표에 값을 삽입하는 방법은 무엇입니까? (0) | 2023.08.10 |
| UIButton의 탭 영역을 늘리려면 어떻게 해야 합니까? (0) | 2023.08.10 |
| VBA(Excel)에서 VSTO 애플리케이션-addin 유형 액세스 (0) | 2023.08.10 |