문제

인덱스 뷰를 만들었습니다.

CREATE VIEW LogValueTexts WITH SCHEMABINDING AS
SELECT ISNULL(LRVS_SLOG_ID*256+LRVS_IDX,0) AS ID,LRVS_VALUE AS Value
FROM dbo.LRVS_LogRecordedValues WHERE LEN(LRVS_VALUE)>4

CREATE UNIQUE CLUSTERED INDEX IX_LogValueTexts ON LogValueTexts (ID)

SQL 2005 표준 SP3에서는 전체 텍스트 색인이보기의 모든 행에 대해 다음 쿼리를 실행하기 때문에 해당보기에 전체 텍스트 색인을 채우는 데 영원히 걸립니다.

SELECT COLUMN FULLTEXTALL FROM[dbo].[LogValueTexts] WHERE COLUMN FULLTEXTKEY = @p1

나는 그것을 가정한다 COLUMN FULLTEXTALL 그리고 COLUMN FULLTEXTKEY 실제로 Value 그리고 ID, 그러나 이것이 SQL Server 프로파일 러가 보여주는 것입니다. 문제는 쿼리 계획이보기에서 인덱스를 사용하지 않기 때문에 약 11m 행/1GB의 데이터에 대한 클러스터 인덱스 스캔을 사용한다는 것입니다. 해당 쿼리에 대한 계획 안내서를 작성하려고 시도했지만 표준 T-SQL 쿼리가 아니기 때문에 허용하지 않습니다 (Incorrect syntax near the keyword 'FULLTEXTKEY').

이 전체 텍스트 색인이 다음 이외의 작업을 수행 할 수있는 방법이 있습니까?

  • SQL 2008 (또는 SQL 2005 Enterprise)로 업그레이드하는 경우 잘 작동합니다.
  • 기본 테이블에 고유 한 ID와 커버링 인덱스를 만듭니다.

업그레이드는 서버에서 다운 타임과 새로운 SQL 서버 라이센스가 필요할 것입니다. 고유 ID와 커버링 인덱스는 11m 행의 하위 집합 만 전체 텍스트 인덱싱이 필요하기 때문에 많은 공간을 낭비 할 수 있습니다.LRVS_VALUE 자주있는 일이야 NULL 또는 매우 짧은 텍스트 값이 있습니다).

도움이 되었습니까?

해결책

나는 당신의 데이터를 모른다. 원래 테이블에 전체 텍스트 색인을 넣을 수없는 이유는 무엇입니까? 계산 된 열을 테이블 구조에 추가 할 수 있습니다. 그렇게하면 인덱스 재건 작업이 없을 것입니다 (스캔의 원인이라고 생각합니다).

그렇게 할 수 없다면 다음으로 가장 쉬운 변경 사항은 SP 또는 트리거로 채워진 조회 테이블을 생성 할 가능성이 높습니다.

최종 옵션 (그리고 올바른 시간을 보내기 위해 시간을 보내야하는 옵션)은 파티션 된 테이블을 사용하는 것입니다. 보기에서 필터링 된 데이터를 다루는 파티션을 가질 수 있습니다. 전체 텍스트 색인 전체 테이블; 실행 시간에 쿼리가 관련 데이터를 사용하여 분할 된 테이블에 도달합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top