문제

나는 단지 그것을 읽었다 VARCHAR(MAX) 데이터 유형 (2GB에 가까운 Char 데이터를 저장할 수 있음)은 권장되는 대체품입니다. TEXT SQL Server 2005 및 다음 SQL Server 버전의 데이터 유형.

문자열의 열 내부를 검색하려면 어떤 작업이 더 빠릅니까?

  1. A를 사용합니다 LIKE A에 대한 조항 VARCHAR(MAX) 열?

    WHERE COL1 LIKE '%search string%'

  2. 사용 TEXT 열을 넣고 a 전문 지수/목록 이 열에서 다음을 사용하여 검색하십시오 CONTAINS 절?

    WHERE CONTAINS (Col1, 'MyToken')

도움이 되었습니까?

해결책

그만큼 VARCHAR(MAX) 유형은 대체품입니다 TEXT. 기본적인 차이점은 a TEXT 유형은 항상 데이터를 블로브에 저장하는 반면 VARCHAR(MAX) 유형은 8K 제한을 초과하지 않는 한 데이터를 행에 직접 저장하려고 시도하고 그 시점에서 덩어리에 저장합니다.

좋아요 진술을 사용하는 것은 두 데이터 타입 사이에서 동일합니다. 추가 기능 VARCHAR(MAX) 당신에게 그것은 또한 그것을 사용할 수 있다는 것입니다. = 그리고 GROUP BY 다른 것과 마찬가지로 VARCHAR 열이 될 수 있습니다. 그러나 많은 데이터가 있으면 이러한 방법을 사용하여 큰 성능 문제가 발생합니다.

사용해야하는 경우 LIKE 검색하거나 사용해야하는 경우 전체 텍스트 인덱싱 그리고 CONTAINS. 이 질문은에 관계없이 동일합니다 VARCHAR(MAX) 또는 TEXT.

많은 양의 텍스트를 검색하고 성능이 중요하다면 전문 지수.

LIKE 구현하기가 더 간단하고 소량의 데이터에 적합하지만 인덱스를 사용할 수 없기 때문에 큰 데이터로 성능이 매우 열악합니다.

다른 팁

큰 텍스트의 경우 전문 지수 ~이다 많이 더 빠르게. 하지만 당신은 할 수 있습니다 전문 지수 varchar(max)또한.

텍스트 필드를 텍스트에서 Varchar로 변환하지 않고 검색 할 수 없습니다.

declare @table table (a text)
insert into @table values ('a')
insert into @table values ('a')
insert into @table values ('b')
insert into @table values ('c')
insert into @table values ('d')


select *
from @table
where a ='a'

이것은 오류가 발생합니다.

The data types text and varchar are incompatible in the equal to operator.

이것은 그렇지 않습니다.

declare @table table (a varchar(max))

재미있게, LIKE 여전히 작동합니다

where a like '%a%'
  • 기본 정의

TEXT 그리고 VarChar(MAX) 비 unicode 대규모 가변 길이 문자 데이터 유형으로 최대 2147483647의 비 unicode 문자 (즉, 최대 저장 용량 : 2GB)를 저장할 수 있습니다.

  • 어느 쪽을 사용해야합니까?

에 따라 MSDN 링크 Microsoft는 텍스트 데이터 유형을 사용하지 말 것을 제안하고 있으며 향후 버전의 SQL Server에서 제거 될 것입니다. Varchar (Max)는 텍스트 데이터 유형 대신 큰 문자열 값을 저장하기위한 제안 된 데이터 유형입니다.

  • 인루 또는 외부 저장

a의 데이터 Text 유형 열은 별도의 LOB 데이터 페이지에 저장 저장됩니다. 테이블 데이터 페이지의 행에는 실제 데이터가있는 LOB 데이터 페이지에 대한 16 바이트 포인터 만 있습니다. a의 데이터 동안 Varchar(max) 유형 열은 8000 바이트보다 작거나 같은 경우에 저장됩니다. Varchar (Max) 열 값이 8000 바이트를 건너는 경우 Varchar (Max) 열 값은 별도의 LOB 데이터 페이지에 저장되고 Row는 실제 데이터가있는 LOB 데이터 페이지에 16 바이트 포인터 만 갖습니다. 그래서 In-Row Varchar (Max)는 검색 및 검색에 적합합니다.

  • 지원/지원 기능

문자열 함수, 연산자 또는 텍스트 유형 열에서 작동하지 않지만 Varchar (Max) 유형 열에서 작동합니다.

  1. = Varchar (Max) 유형 열의 연산자와 동일합니다.
  2. varchar (max) 유형 열에서 절별로 그룹

    • 시스템 IO 고려 사항

우리가 알다시피, 바르 차 (max) 유형 열 값은 저장 될 값의 길이가 8000 바이트보다 크거나 행에 공간이 충분하지 않은 경우에만 행 밖으로 저장됩니다. 그렇지 않으면 저장됩니다. 그것은 인루입니다. 따라서 Varchar (Max) 열에 저장된 대부분의 값이 크고 외부로 저장된 경우 데이터 검색 동작은 텍스트 유형 열의 것과 거의 유사합니다.

그러나 Varchar (Max) 유형에 저장된 대부분의 값이 내면을 저장할 정도로 작 으면. 그런 다음 LOB 열이 포함되지 않은 데이터를 검색하려면 LOB 열 값이 비 LOB 열 값이 저장되는 동일한 데이터 페이지에 내락으로 저장되므로 더 많은 수의 데이터 페이지가 읽어야합니다. 그러나 선택 쿼리에 LOB 열이 포함 된 경우 텍스트 유형 열에 비해 데이터 검색에 대해 읽을 수있는 페이지 수가 적습니다.

결론

사용 VarChar(MAX) 보다는 데이터 유형입니다 TEXT 좋은 성능을 위해.

원천

사용하는 경우 MS 액세스 (특히 2003 년과 같은 이전 버전) 사용해야합니다. TEXT MS Access로 SQL Server의 Datatype은 인식하지 못합니다. nvarchar(MAX) 액세스의 메모 필드로 TEXT 메모 필드로 인식됩니다.

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