사용자 지정 압축을 수행하는 방법에는 현재 두 가지가 있습니다.
SQL Server 2016부터 COMPRESS 및 DECOMPRESS에 대한 기본 제공 기능이 있습니다. 이 함수는 GZip 알고리즘을 사용합니다.
SQLCLR을 사용하여 선택한 알고리즘을 구현하십시오 (그의 답변에서 언급 된 @Remus). 이 옵션은 SQL Server 2016 이전 버전에서 사용할 수 있으며 SQL Server 2005로 거슬러 올라갑니다.
GZip은 .NET 및 지원되는 .NET Framework 라이브러리 (코드는 SAFE
어셈블리에 있을 수 있음)에서 사용할 수 있으므로 쉽게 선택할 수 있습니다 . 또는 GZip을 원하지만 코딩 / 배포를 처리하지 않으려 는 경우 무료 버전의 SQL # SQLCLR 라이브러리 (저는 필자) 에서 사용할 수 있는 Util_GZip 및 Util_GUnzip 함수를 사용할 수 있습니다 .
직접 코딩하든 SQL #을 사용하든 GZip을 사용하기로 결정한 경우 .NET에서 GZip 압축을 수행하는 데 사용되는 알고리즘이 Framework 버전 4.5에서 더 잘 변경되었습니다 (MSDN의 "설명"섹션 참조). GZipStream 클래스 페이지 ). 이것은 다음을 의미합니다.
- 프레임 워크 버전 2.0, 3.0 및 3.5를 처리하는 CLR v 2.0에 연결된 SQL Server 2005, 2008 또는 2008 R2를 사용하는 경우 프레임 워크 버전 4.5의 변경 사항이 적용되지 않으며 불행히도 .NET의 독창적 인 알고리즘.
- Framework 버전 4.0, 4.5.x, 4.6을 처리하는 CLR v 4.0에 연결된 SQL Server 2012 이상 (지금까지 2014 및 2016)을 사용하는 경우 더 새롭고 더 나은 알고리즘을 사용할 수 있습니다. 유일한 요구 사항은 SQL Server를 실행하는 서버에서 .NET Framework를 버전 4.5 이상으로 업데이트 한 것입니다.
그러나 GZip을 사용할 필요는 없으며 알고리즘을 자유롭게 구현할 수 있습니다.
참고 : 위에서 언급 한 모든 방법은 기술적으로 "NVARCHAR (MAX) 데이터를 압축하는 대체 방법"임에도 불구하고 실제 대체 방법이 아니라 "해결 방법"입니다. 차이점은 데이터 압축 내장과 함께 - row
및 page
- SQL Server에서 제공되는 압축 막후 처리하고 데이터가 여전히 사용 가능한 읽을 수 및 색인입니다. 그러나 데이터를 압축하면 VARBINARY
공간을 절약하면서 기능을 포기할 수 있습니다. 사실, 20k 문자열은 어쨌든 인덱싱 할 수 없지만 여전히WHERE
절 또는 문자열 함수 사용자 정의 압축 값으로 작업을 수행하려면 압축을 풀어야합니다. 이진 파일 (PDF, JPEG 등)을 압축 할 때 이것은 문제가되지 않지만이 질문은 NVARCHAR
데이터 에만 해당됩니다 .