source

SQL Server에서 varchar(MAX) 대 TEXT 사용

ittop 2023. 4. 27. 22:45
반응형

SQL Server에서 varchar(MAX) 대 TEXT 사용

그 신문을 읽었습니다.VARCHAR(MAX) 유형할 수 은 이유형은(2GB 저수를있할장음다데터좋니데)의 됩니다.TEXTSQL Server 2005 및 Next SQL SERVER 전터이유형니다입버데의▁sql다니유▁next입형.

열에서 문자열을 검색하려면 어떤 작업이 더 빠릅니까?

  1. 사용 사용LIKE에대조항에 VARCHAR(MAX)칼럼?

    WHERE COL1 LIKE '%search string%'

  2. TEXT열을 열고 이 열에 전체 텍스트 색인/카탈로그를 놓은 다음, 를 사용하여 검색합니다.CONTAINS조항?

    WHERE CONTAINS (Col1, 'MyToken')

VARCHAR(MAX)은 ▁forment의 입니다.TEXT은 기적인차은점이본라는 입니다.TEXT type은 bob에 저장합니다.VARCHAR(MAX)type은 8k 제한을 초과하지 않는 한 행에 데이터를 직접 저장하려고 시도하며, 이 시점에서 데이터를 Blob에 저장합니다.

LIKE 문을 사용하는 것은 두 데이터 유형 간에 동일합니다.은 다음과 같습니다.VARCHAR(MAX)당신에게 주는 것은 그것이 또한 사용될 수 있다는 것입니다.=그리고.GROUP BY여느 때와 마찬가지로VARCHAR열은 다음과 같을 수 있습니다.그러나 데이터가 많은 경우 이러한 방법을 사용하면 성능 문제가 크게 발생합니다.

▁use를 사용해야 .LIKE검색하거나 전체 텍스트 인덱싱을 사용해야 하는 경우CONTAINS이 질문은 다음과 상관없이 동일합니다.VARCHAR(MAX)또는TEXT.

많은 양의 텍스트를 검색하고 성능이 중요한 경우 전체 텍스트 색인을 사용해야 합니다.

LIKE구현이 간편하고 소량의 데이터에 적합한 경우가 많지만 인덱스를 사용할 수 없어 대용량 데이터의 성능이 매우 떨어집니다.

큰 텍스트의 경우 전체 텍스트 색인이 훨씬 빠릅니다.그러나 전체 텍스트 색인을 만들 수 있습니다. varchar(max)뿐만 아니라.

  • 기본 정의

TEXT그리고.VarChar(MAX)는 최대 2,147,483,647개의 비유니코드 문자를 저장할 수 있는 비유니코드 대형 가변 길이 문자 데이터 유형입니다(즉, 최대 저장 용량은 2GB).

  • 어떤 것을 사용해야 합니까?

MSDN에 따르면, Microsoft는 다음과 같은 기능을 사용하지 않을 것을 제안하고 있습니다.TEXTSQL Server의 향후 버전에서 제거될 데이터 유형입니다. VarChar(MAX)는 큰 문자열 값을 저장하기 위해 제안된 데이터 유형입니다.TEXT데이터 형식

  • 행 내 또는 행 외 스토리지

- 터의 TEXT유형 열은 별도의 LOB 데이터 페이지에 행 밖으로 저장됩니다.테이블 데이터 페이지의 행에는 실제 데이터가 있는 LOB 데이터 페이지에 대한 16바이트 포인터만 있습니다.의 .VarChar(MAX)형식 열이 8,000바이트 이하이면 연속적으로 저장됩니다.만약 a의 값인 경우VarChar(MAX)열이 8000바이트보다 크면VarChar(MAX)열 값은 별도의 LOB 데이터 페이지에 저장되며 행에는 실제 데이터가 있는 LOB 데이터 페이지에 대한 16바이트 포인터만 있습니다.그래서 "연쇄"VarChar(MAX)검색 및 검색에 유용합니다.

  • 지원/지원되지 않는 기능

함수, 및 일부문함수는, .TEXT에서 합니다. 그러나 그들은 작업을 합니다.VarChar(MAX)열을 입력합니다.

  1. =산와자같의 VarChar(MAX) column
  2. GROUP BY에 관한 VarChar(MAX) column
  • 시스템 IO 고려 사항

아시다시피,VarChar(MAX)유형 열 값은 값의 길이가 8,000바이트보다 크거나 행에 공간이 충분하지 않은 경우에만 열 밖에 저장됩니다. 그렇지 않으면 열에 저장됩니다. 만약에 그서만대값부저들있다에 이라면,VarChar(MAX)행이 일정하지 검색 동작은 "" " " " " " " " "와합니다.TEXT열을 입력합니다.

이 분의저경우된에 되어 있다면,VarChar(MAX)LOB 열 값이 비 LOB 열 값이 저장된 동일한 데이터 페이지에 연속으로 저장되므로 LOB 열이 포함되지 않은 데이터를 검색하려면 더 많은 데이터 페이지를 읽어야 합니다.하지만 만약에SELECT 페이지 가 쿼에리 LOB 이되있다보다 . 그러면 데이터 검색을 위해 읽을 페이지 수가 더 적습니다.TEXT열을 입력합니다.

결론

사용하다VarChar(MAX) 유형아닌이 TEXT더 나은 성능을 위해.

원천

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

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'

그러면 다음과 같은 오류가 표시됩니다.

유형은 다음과 같습니다.text그리고.varchar연산자와 동일한 값이 호환되지 않습니다.

반면에 이것은 그렇지 않습니다.

DECLARE @table TABLE (a varchar(max))

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

WHERE a LIKE '%a%'

MS Access(특히 2003과 같은 이전 버전)를 사용하는 경우 강제로 사용해야 합니다.TEXT Access를 은 "SQL Server"입니다.nvarchar(MAX)하는 반면, 스의메필드모로반면액, 세면▁as.TEXT메모 필드로 인식됩니다.

언급URL : https://stackoverflow.com/questions/834788/using-varcharmax-vs-text-on-sql-server

반응형