2012-04-12 3 views
4

5kk 행에 가까운 표가 있습니다. 그들 각각은 내 XML 로그를 저장 한 텍스트 열이이 끝없는 쿼리는 어떻게 향상시킬 수 있습니까?

내가

SELECT top 1 id_log FROM Table_Log WHERE log_text LIKE '%<node>value</node>%' 

하지만 그것으로 시도했습니다

<node>value</node> 

을 가진 일부 로그가 있는지 알아 내기 위해 노력하고 있어요 결코 끝나지 않는다.

이 검색을 개선하기위한 방법이 있습니까?

PS : 나는 그 그 열에 전체 텍스트 검색을 구현하는 것입니다 최적화 볼 수있는 유일한 방법에 대해,

+0

"never finishes"정의 – Matten

+6

기본적으로 'LIKE'% .... % ''를 검색하면 색인이 도움이되지 않습니다. 그래서 저는 두려워요 - 아니요. 이걸 빨리하기 위해 할 수있는 일은 정말로 없습니다 ...* 도움이 될만한 것은'DATETIME' 열을 가지고 색인을 생성 한 다음 검색 범위를 제한하는 것입니다. 지난 달 정도 (따라서 검색 할 행의 수를 줄이는 것) ... –

+0

10 분 이상 걸리며 결과가 없습니다. – GLlompart

답변

1

해당 열에서 전체 텍스트 검색을 구현하고 테이블을 인덱싱하는 것 외에 다른 매개 변수 (날짜 등)로 결과를 좁힐 수도 있습니다. 또한 행을 삽입 할 때 채울 수있는 "태그"라는 테이블 필드 (varchar 유형)를 추가 할 수 있습니다. 이 필드는이 로그에 대해 "키워드, 태그"를 등록합니다. 이 방법으로이 필드를 조건으로 쿼리를 변경할 수 있습니다.

+0

날짜 별 필터링이 트릭을 만들었습니다. – GLlompart

1

불행하게도 모든 로그를 삭제할 수는 없지만, 심지어는 곳으로 구성하기 어려울 것입니다 특정 요소 내에서 특정 값을 리턴합니다.

저는 현재 열 중 하나에 XML을 저장하고있는 일부 작업을하고 있습니다. 그러나 필자는 데이터에 필요한 모든 쿼리가 오랜 시간이 걸릴 것으로 가정하고 있으며 이는 우리의 요구에 부합합니다.

또 다른 옵션은 이진 열에 데이터를 저장하는 것과 관련이 있으며 SQL Server에는 해당 필드에 저장되는 문서 형식을 지정하는 옵션이 있습니다. 이를 통해 예를 들어 해당 필드에서 더 의미있는 전체 텍스트 검색을 구현할 수 있습니다. 그러나 이것이 당신이 요구하는 것을 효율적으로 처리 할 것이라고 상상하기가 어렵습니다.

0

같은 쿼리를 사용하고 있습니다. 색인이 필요 없습니다 = 아니오 good 현재 불행히도 속도를 높이기 위해 할 수있는 일은 없습니다.

9

'%<node>value</node>%'과 같은 와일드 카드 쿼리는 필드 내에서 일치하는 항목을 찾을 수 없기 때문에 전체 테이블 검색 (색인 제외)이됩니다. 내가이 쿼리를 향상시키기 위해 알고있는 유일한 실제 방법은 (테이블이 지속적으로 로깅되는 경우 고려해야하는 테이블 등을 파티셔닝하지 않고) 전체 테이블 카탈로그 & 인덱스를 테이블에 추가하는 것입니다 해당 필드에 대해보다 효율적인 검색을 제공하십시오.

Here은이를 참조해야합니다. 이 작업이 완료되면 이러한 유형의 검색에 최적화 된 CONTAINS 및 FREETEXT 연산자를 사용할 수 있습니다.

0

는 나는 그것이 도움이되지만 FAST x query hint과 같이를 사용하려고합니다 생각하지 않는다 : 이것은 첫 번째 행을 반환하는 쿼리를 최적화해야

SELECT id_log 
FROM Table_Log 
WHERE log_text LIKE '%<node>value</node>%' 
OPTION(FAST 1) 

.

관련 문제