2012-05-24 4 views
0

파일 이름 구조와 같은 트리를 저장하는 테이블이 있습니다. 현재이 테이블에는 8 백만 개의 레코드가 있습니다. 나는 특정 일련 번호가 이름에 포함되어있는 파일 목록을 빨리 찾는 방법을 연구 중이다. 합니다 (NODE_NAME에 저장된)파일 이름에 전체 텍스트 검색 사용

FS_NODES 
----------------------------------- 
NODE_ID    bigint PK 
ROOT_ID    bigint 
PARENT_ID   bigint 
NODE_TYPE   tinyint 
NODE_NAME   nvarchar(250) 
REC_MODIFIED_UTC  datetime 
REC_DELETION_BIT  bit 

예 파일 이름 :
scriptname_SomeSerialNumber_201205240730.xml 예상대로

는 파일을 찾을 수있는 LIKE 문은 전체 테이블을 스캔하는 데 몇 분 정도 소요 향상 싶습니다 이. 각 개발자가 고유 한 이름 지정 규칙을 만드는 것을 좋아하기 때문에 일관된 이름 패턴이 없습니다.

전체 텍스트 검색을 사용해 보았지만 아이디어가 정말 좋았지 만 이름에 키워드를 기반으로 파일을 찾을 수 없었습니다. 문제는 밑줄로 인한 것 같습니다.

어떻게 작동시킬 수 있습니까? 카탈로그에 중립적 인 언어를 사용하고 있습니다.

@@VERSION 
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
Nov 24 2008 13:01:59 
Copyright (c) 1988-2005 Microsoft Corporation 
Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2) 

카탈로그를 변경하고 키워드를 수동으로 분리하는 방법이 있습니까? 감사합니다.

답변

1

전체 텍스트 검색은 대답이 아닙니다. 부분 문자열 일치가 아닌 단어에 사용됩니다. 당신이해야 할 일은이 테이블에 데이터를 삽입하거나 업데이트 할 때 색인을 생성 할 수있는 자신 만의 열로 나중에 검색 할 때 관련되는 파일 이름 부분을 추출하는 것입니다. 결국, 그들은 당신이 그들을 사용하는 방식으로 별도의 데이터 조각입니다. 또한 개발자가 원하는대로 수행하도록하는 대신보다 예측 가능한 명명 규칙을 적용하는 것도 고려할 수 있습니다. 사용자 요청에 따라

EDIT :

대체하는 계산 열 추가 ('_'파일 이름 ','). 또는 계산 된 열 대신에 수동으로 기존 데이터를 채우는 열과 앞으로 처리 할 삽입 절차를 변경하는 열. 또는 관련 테이블에서 별도의 행으로 분리 할 수도 있습니다.

+0

일반적인 명명 규칙이 작동하지만 앞으로 나아갈 때만 도움이됩니다. 파일 이름은 여러 키워드를 포함 할 수 있으며 fts로 검색하는 식 트리 스타일을 좋아합니다. 나는 이것이 당신의 전형적인 "말"이 아니라는 것을 안다. 그러나 밑줄을 긋기 위해 이상적인 해결책이 될 것이다. 내 계획 B는 이름에서 패턴을 찾아 내고 키워드를 분석하고 태그를 붙이는 것이지만 그렇게하면 쉽게 끝난다. 귀하의 의견에 감사드립니다. – RickCard

+0

제안한대로 계산 된 열을 추가 했으므로 FTS가 카탈로그의 해당 열을 사용할 수있었습니다. 새 열에 대해 CONTAINS 쿼리를 다시 시도하고 분과 비교하여 밀리 초 내에 예상대로 레코드를 반환했습니다. :) 고맙습니다! – RickCard