방금 VARCHAR(MAX)
2GB에 가까운 char 데이터를 저장할 수있는 TEXT
데이터 형식이 SQL Server 2005 및 Next SQL SERVER 버전 의 데이터 형식을 대체하는 것이 좋습니다 .
열 내부에서 문자열을 검색하려면 어떤 작업이 더 빠릅니까?
-
열에
LIKE
대해 절을 사용VARCHAR(MAX)
합니까?WHERE COL1 LIKE '%search string%'
-
TEXT
열을 사용 하여이 열에 전체 텍스트 색인 / 카탈로그 를 넣은 다음CONTAINS
절을 사용하여 검색 합니까?WHERE CONTAINS (Col1, 'MyToken')
답변
이 VARCHAR(MAX)
유형은의 대체품입니다 TEXT
. 기본적인 차이점은 TEXT
형식은 항상 데이터를 Blob에 저장하는 반면, VARCHAR(MAX)
형식은 8k 제한을 초과하지 않는 한 데이터를 행에 직접 저장하려고 시도하고이 시점에서 데이터를 Blob에 저장한다는 것입니다.
LIKE 문 사용은 두 데이터 유형간에 동일합니다. 추가 기능은 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)
2147483647 비 유니 코드 문자 (: 2기가바이트 즉, 최대 저장 용량 인)의 최대 저장할 수 있습니다 유니 코드가 아닌 큰 변수 길이 문자 데이터 유형입니다.
- 어느 것을 사용해야합니까?
에 따라 MSDN 링크 마이크로 소프트는 텍스트 데이터 유형을 사용하지 않는 것이 제안되고 이는 SQL Server의 이후 버전에서 제거 될 예정입니다. Varchar (Max)는 Text 데이터 형식 대신 큰 문자열 값을 저장하기 위해 제안 된 데이터 형식입니다.
- In-Row 또는 Out-of-Row 스토리지
(A)의 데이터 Text
형식 열이 밖으로의 열 저장 별도 LOB 데이터 페이지이다. 테이블 데이터 페이지의 행에는 실제 데이터가있는 LOB 데이터 페이지에 대한 16 바이트 포인터 만 있습니다. Varchar(max)
유형 열의 데이터는 8000 바이트 이하인 경우 행에 저장됩니다. Varchar (max) 열 값이 8000 바이트를 넘으면 Varchar (max) 열 값은 별도의 LOB 데이터 페이지에 저장되며 행에는 실제 데이터가있는 LOB 데이터 페이지에 대한 16 바이트 포인터 만 있습니다. 따라서 In-Row
Varchar (Max)는 검색 및 검색에 적합합니다.
- 지원 / 지원되지 않는 기능
텍스트 유형 열에서는 작동하지 않지만 VarChar (Max) 유형 열에서는 작동하는 일부 문자열 함수, 연산자 또는 구문입니다.
=
VarChar (Max) 유형 열의 연산자와 동일-
VarChar (Max) 유형 열의 그룹 별 절
- 시스템 IO 고려 사항
VarChar (Max) 유형 열 값은 저장할 값의 길이가 8000 바이트를 초과하거나 행에 공간이 충분하지 않은 경우에만 행 외부에 저장됩니다. 그렇지 않으면 저장됩니다. 그것은 행에있다. 따라서 VarChar (Max) 열에 저장된 대부분의 값이 크고 행 외부에 저장된 경우 데이터 검색 동작은 텍스트 유형 열과 거의 유사합니다.
그러나 VarChar (Max) 유형 열에 저장된 대부분의 값이 행에 저장하기에 충분히 작은 경우. 그런 다음 LOB 컬럼 값이 포함되지 않은 데이터를 검색하려면 LOB 컬럼 값이 비 LOB 컬럼 값이 저장된 동일한 데이터 페이지에 행에 저장되므로 더 많은 수의 데이터 페이지를 읽어야합니다. 그러나 선택 쿼리에 LOB 열이 포함 된 경우 텍스트 유형 열과 비교하여 데이터 검색을 위해 읽을 페이지 수가 더 적습니다.
결론
좋은 성능 VarChar(MAX)
보다는 데이터 형식을 사용하십시오 TEXT
.
답변
사용하는 경우 MS 액세스 (2003 같은 특히 이전 버전)를 사용하도록 강요 TEXT
MS 액세스가 인식하지 않는 한 SQL Server에서 데이터 유형을 nvarchar(MAX)
반면, Access에서 메모 필드로 TEXT
메모 필드로 인식되고 있습니다.