SQL 데이터 정렬과 Windows 데이터 정렬 비교

기술 자료 번역 기술 자료 번역
기술 자료: 322112 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

Microsoft SQL Server 2000 및 Microsoft SQL Server 2005에서 "데이터 정렬"은 문자열을 비교 및 정렬하는 방법과 유니코드가 아닌 데이터에 사용되는 문자 집합을 지정합니다. SQL Server 2000은 두 가지 유형의 데이터 정렬을 지원합니다.
  • SQL 데이터 정렬
  • Windows 데이터 정렬
각각의 데이터 정렬 유형에 대한 설명과 사용할 데이터 정렬을 결정하는 방법에 대한 유용한 개요는 SQL Server 2000 온라인 설명서의 "데이터 정렬 선택" 항목을 참조하거나 SQL Server 2005 온라인 설명서의 "데이터 정렬 유형" 항목을 참조하십시오.

본 문서는 SQL Server 2000 또는 SQL Server 2005를 설치할 때 Windows 데이터 정렬을 선택할지 SQL 데이터 정렬을 선택할지를 결정하는 데 영향을 줄 수 있는 추가 고려 사항을 설명합니다.

추가 정보

데이터 정렬 방식

Windows 데이터 정렬의 경우 유니코드가 아닌 데이터의 비교는 유니코드 데이터와 같은 알고리즘을 사용하여 구현됩니다. 유니코드 및 유니코드가 아닌 정렬 모두 특정 버전의 Windows의 문자열 비교 규칙과 호환됩니다. 이는 SQL Server의 데이터 형식 간에 일관성을 제공합니다. 또한 CompareString Win32 API 함수를 사용하는 개발자는 SQL Server가 사용하는 것과 동일한 규칙을 사용하여 사용 중인 응용 프로그램에서 문자열을 정렬할 수 있습니다.

SQL 데이터 정렬에서 SQL Server는 유니코드가 아닌 데이터에 대해 다른 비교 방식을 정의합니다. SQL Server는 SQL "정렬 순서"를 기준으로 이러한 비교 방식을 결정합니다. SQL 데이터 정렬에 대한 정렬 순서 매핑은 SQL Server 온라인 도움말의 "SQL 데이터 정렬 이름" 항목을 참조하십시오.

유니코드가 아닌 데이터를 정렬하기 위한 SQL 데이터 정렬 규칙은 Microsoft Windows 운영 체제에서 제공하는 정렬 루틴과 호환되지 않지만, 유니코드 데이터 정렬의 경우 특정 버전의 Windows 정렬 규칙과 호환됩니다. 유니코드가 아닌 데이터와 유니코드 데이터의 비교 규칙이 다르기 때문에 SQL 데이터 정렬을 사용하는 경우 기본 데이터 형식에 따라 같은 문자의 비교 결과가 달라질 수 있습니다. 예를 들어 SQL 데이터 정렬 "SQL_Latin1_General_CP1_CI_AS"를 사용하는 경우 유니코드가 아닌 문자열 'a-c'가 문자열 'ab'보다 작은 것으로 간주되며, 이유는 하이픈("-")이 "b" 앞에 오는 개별 문자로 정렬되기 때문입니다. 그러나 유니코드 정렬 규칙은 하이픈을 무시하는 "단어 정렬"을 사용하므로 이들 문자열을 유니코드로 변환하고 위와 동일한 비교 작업을 수행할 경우 유니코드 문자열 N'a-c'가 N'ab'보다 큰 것으로 간주됩니다.

문자열 비교 성능

유니코드 정렬 규칙은 유니코드가 아닌 SQL 정렬 순서 규칙보다 훨씬 더 복잡합니다. SQL Server에서 유니코드 데이터를 비교하는 경우 문자에 데이터 정렬 로캘에 따라 동적으로 수정되는 가중치가 할당됩니다. 또한 너비, 악센트 또는 가나(Kana) 문자 구분 등과 같은 비교 스타일 설정에 의해서도 데이터가 수정됩니다. 유니코드 정렬 루틴은 단어 정렬과 같이 보다 지능적인 정렬 동작을 지원합니다.

또한 루틴은 유니코드 데이터를 반드시 처리해야 하므로, 대부분의 SQL Server 정렬 순서가 처리할 수 있는 최대 255자 대신에 수천 개의 고유한 문자를 정렬하고 비교할 수 있을 정도로 매우 유연합니다. 이러한 이유로 유니코드 정렬 규칙을 사용하는 원시 문자열 비교 작업은 유니코드가 아닌 SQL 정렬 순서를 사용하는 비슷한 문자열 비교보다 시간과 CPU 수명에 있어 일반적으로 더 많은 비용이 듭니다.

SQL Server에서 데이터 형식과 데이터 정렬 유형의 가능한 조합에 대한 설명
  • 유니코드가 아닌 데이터 형식(char, varchar, text)을 사용하여 데이터를 저장하고 처리하며 SQL 데이터 정렬을 사용하는 경우에는 유니코드가 아닌 SQL 정렬 순서를 통해 문자열 비교가 수행됩니다.
  • 유니코드가 아닌 데이터 형식(char, varchar, text)을 사용하여 데이터를 저장하고 처리하며 Windows 데이터 정렬을 사용하는 경우에는 유니코드 정렬 규칙을 통해 문자열 비교가 수행됩니다. 이로 인해 문자열 정렬 성능에 심하게 의존하는 작업의 경우 SQL 데이터 정렬을 통해 유사한 작업을 수행할 때보다 시간이 더 많이 소요되고 CPU도 더 많이 사용할 수 있습니다.
  • 유니코드 데이터 형식(nchar, nvarchar, ntext)을 사용 중인 경우에는, SQL과 Windows 데이터 정렬 모두 유니코드 정렬 규칙을 사용하므로 정렬 동작에 별다른 차이가 없습니다.
일반적으로 Windows와 SQL 데이터 정렬 간의 성능 차이 정도는 크지 않습니다. 작업 로드가 I/O 또는 네트워크 속도에는 제한을 받지 않고 CPU에 영향을 받는 경우에만 차이가 나타나며 대부분의 경우 이런 CPU 부담은 SQL Server에서 수행되는 문자열 조작이나 비교 오버헤드로 인해 발생합니다. 성능 차이가 현저하게 나타날 수 있는 응용 프로그램의 예로는 SQL Server 저장 프로시저에 긴 문자열 값을 전달하는 응용 프로그램 시스템이 있습니다. 이 경우 저장 프로시저는 CHARINDEX 또는 PATINDEX와 같은 Transact-SQL 문자열 조작 함수를 광범위하게 사용하여 문자열을 구문 분석합니다. 작업 로드가 상당히 일차원적이고 이러한 문자열 구문 분석 저장 프로시저 실행에 의해 영향을 받는 경우 SQL 데이터 정렬과 Windows 데이터 정렬 간에 성능 차이가 두드러질 수 있습니다. 하지만 대부분의 응용 프로그램은 성능 차이가 크게 차이나지 않도록 설계되었습니다.

권장 사항

  1. SQL 데이터 정렬은 이전 버전의 SQL Server와 호환되도록 제공됩니다. Windows 데이터 정렬은 SQL Server에서 유니코드와 유니코드가 아닌 텍스트 모두에 대해 Windows 운영 체제에서의 문자열 비교와도 동일한 일관된 문자열 비교를 제공합니다. 따라서 SQL 데이터 정렬을 필요로 하는 이전 버전과의 호환성 문제나 특정 성능 문제가 있지 않은 한 Windows 데이터 정렬을 주로 사용합니다.
  2. SQL 데이터 정렬의 성능 특징만으로 SQL 데이터 정렬을 고려하는 경우 데이터 정렬을 변경해도 대부분의 응용 프로그램 성능이 크게 향상되지 않는다는 점을 염두에 두십시오. SQL 데이터 정렬을 통해 성능이 향상되는 쿼리를 파악해야 합니다. 영향 받는 쿼리를 확인하게 되면 데이터 정렬을 변경하는 대신 다음과 같은 방법을 고려해 보십시오. 이들 방법 모두는 SQL 데이터 정렬에서 인스턴스 데이터 정렬을 변경하는 경우보다 성능을 더 크게 향상시킬 수 있습니다.
    1. Windows 데이터 정렬의 오버헤드가 명시적인 문자열 조작이나 구문 분석을 수행하는 Transact-SQL 루틴으로 인해 발생하는 경우와 유니코드가 아닌 데이터 형식을 사용 중인 경우 자주 실행되고 비용이 가장 많이 드는 작업에 대해 SQL 데이터 정렬이나 Windows 이진 데이터 정렬을 지정할 수 있습니다. PATINDEX 함수를 사용하여 테이블의 텍스트 열에 "x" 문자를 포함할지 여부를 지정한다고 가정합시다. 특정 비교 작업에만 SQL 데이터 정렬을 사용하고 나머지 데이터베이스와 응용 프로그램에는 Windows 데이터 정렬을 계속 사용하는 경우 전체 시스템의 데이터 정렬을 변경하지 않아도 됩니다.
      SELECT PATINDEX ('%x%', MemoFld COLLATE SQL_Latin1_General_Cp1_CI_AS) FROM ...
    2. Windows 데이터 정렬의 오버헤드가 복잡한 문자열 조작 함수를 사용하지 않는 보다 실제적인 쿼리에 의해 발생하는 경우, 향상된 인덱스 또는 쿼리 디자인을 사용하여 SQL 데이터 정렬로 변경하는 경우에서 보다 성능을 향상시킬 수 있습니다. 해당 인덱스에서 매우 엄선된 검색으로 충족될 수 있는 쿼리는 문자열 비교 방법을 약간 변경해도 크게 영향을 받지 않습니다. 반대로, 테이블 검색을 수행하고 수백만 개의 각 행과 특정 값을 비교해야 하는 쿼리에서는 문자열을 비교할 때마다 약간의 오버헤드가 빠르게 증가할 수 있습니다. 인덱스나 쿼리 자체를 변경하여 쿼리 계획에서 큰 테이블이나 인덱스 검색을 막으면 SQL 데이터 정렬로 변경하는 경우보다 쿼리가 훨씬 더 빨리 수행됩니다.
참고?SQL 데이터 정렬이 변형된 세 번째 유형의 데이터 정렬이 있습니다. 이러한 세 번째 데이터 정렬은 "호환성 데이터 정렬" 또는 "퇴행성 데이터 정렬"로 알려져 있습니다. 호환성 데이터 정렬은 SQL Server 2000에서 미리 정의된 데이터 정렬 이름이 없는 정렬과 비교 규칙의 집합입니다. 예를 들어 유니코드 및 유니코드가 아닌 데이터에 대해 일관되지 않은 대소문자 구분 설정을 사용하는 SQL Server 7.0을 설정하는 경우 SQL Server 7.0 인스턴스를 SQL Server 2000으로 업그레이드할 때 호환성 데이터 정렬을 사용하게 됩니다. 이 문서의 앞부분에서 설명한 SQL 데이터 정렬과 관련한 정보가 호환성 데이터 정렬에도 적용됩니다.

호환성 데이터 정렬에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
270042 SQL Server 호환성 데이터 정렬에 대한 설명




Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 322112 - 마지막 검토: 2006년 6월 14일 수요일 - 수정: 8.4
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
키워드:?
kbhowto kbinfo KB322112

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com