SQL 2005 인덱스보기의 전체 텍스트 지수 인구 성능
-
05-07-2019 - |
문제
인덱스 뷰를 만들었습니다.
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 또는 트리거로 채워진 조회 테이블을 생성 할 가능성이 높습니다.
최종 옵션 (그리고 올바른 시간을 보내기 위해 시간을 보내야하는 옵션)은 파티션 된 테이블을 사용하는 것입니다. 보기에서 필터링 된 데이터를 다루는 파티션을 가질 수 있습니다. 전체 텍스트 색인 전체 테이블; 실행 시간에 쿼리가 관련 데이터를 사용하여 분할 된 테이블에 도달합니다.