분산 쿼리 최적화
성능 향상을 위해 SQL Server는 분산 쿼리와 관련한 다음 유형의 최적화를 수행합니다.
OLE DB SQL 명령 공급자와 함께 사용하는 원격 쿼리 실행
OLE DB 공급자가 다음 최소 요구 사항에 맞는 경우에는 OLE DB 공급자가 SQL 명령 공급자로 인식됩니다.
Command 개체와 해당 필수 인터페이스를 모두 지원합니다.
DBPROPVAL SQL SUBMINIMUM 구문 또는 ISO의 초급 수준 이상, ODBC의 핵심 수준 이상을 지원합니다. 공급자는 DBPROP_SQLSUPPORT OLE DB 속성을 통해 이러한 언어 수준을 제공해야 합니다.
OLE DB 인덱스 공급자와 함께 사용하는 인덱싱된 액세스
OLE DB 공급자가 다음 최소 요구 사항에 맞는 경우에는 OLE DB 공급자가 인덱스 공급자로 인식됩니다.
TABLES, COLUMNS, INDEXES 스키마 행 집합이 있는 IDBSchemaRowset 인터페이스를 지원합니다.
인덱스 이름과 해당 기본 테이블 이름을 지정하여 IOpenRowset을 통해 인덱스의 행 집합 열기를 지원합니다.
인덱스 개체는 IRowset, IRowsetIndex, IAccessor, IColumnsInfo, IRowsetInfo 및 IConvertTypes와 같은 필수 인터페이스를 모두 지원해야 합니다.
인덱싱된 기본 테이블에 대해 IOpenRowset을 사용하여 열린 행 집합은 인덱스에서 검색된 책갈피를 기반으로 행 위에 위치를 지정하기 위해 IRowsetLocate 인터페이스를 지원해야 합니다.
원격 쿼리 실행
SQL Server는 분산 쿼리의 평가를 SQL 명령 공급자에게 되도록 많이 위임하려고 시도합니다. 공급자의 데이터 원본에 저장된 원격 테이블만 액세스하는 SQL 쿼리는 원래의 분산 쿼리에서 추출되며 공급자에 대해 실행됩니다. 이러한 동작으로 공급자에서 반환되는 행 수가 줄어들며, 공급자는 쿼리 평가에 인덱스를 사용할 수 있습니다.
SQL 명령 공급자로 위임되는 원래의 분산 쿼리의 양에 영향을 주는 요소는 다음과 같습니다.
SQL 명령 공급자에서 지원하는 언어 수준
데이터 정렬 호환성
SQL 명령 공급자에서 지원하는 언어 수준
SQL Server는 특정 언어 수준에 의해 지원되는 경우에만 작업을 위임합니다. 최상위부터 최하위까지의 언어 수준은 SQL Server, ISO 초급 단계, ODBC 핵심 및 Jet입니다. 언어 수준이 높을수록 SQL Server가 공급자에게 위임할 수 있는 작업은 더 많아집니다.
[!참고]
SQL Server 언어 수준은 공급자가 SQL Server 연결된 서버와 일치할 때 사용됩니다.
각 언어 수준은 하위 수준의 상위 집합입니다. 따라서, 작업이 특정 수준으로 위임되는 경우에는 그 작업이 모든 상위 수준으로도 위임됩니다.
bit 및 uniqueidentifer 데이터 형식이 포함된 쿼리는 공급자에 위임되지 않으며 항상 로컬로 평가됩니다.
SET 옵션 CONCAT_NULL_YIELDS_NULL이 OFF인 경우 문자열 연결은 항상 로컬로 수행됩니다.
다음 작업/구문 요소는 표시된 언어 수준 및 모든 상위 수준으로 위임됩니다.
SQL Server: 외부 조인, CUBE, ROLLUP, modulo 연산자(%), 비트 단위 연산자, 문자열 함수, 산술 시스템 함수
ISO 초급 단계: UNION, UNION ALL
ODBC 핵심: DISTINCT, 문자열 상수가 포함된 집계 함수
Jet: DISTINCT, 정렬(ORDER BY), 내부 조인, 조건자, 하위 쿼리 연산자(EXISTS, ALL, SOME, IN), DISTINCT, 상위 수준에서 인용되지 않은 산술 연산자, 상위 수준에서 인용되지 않은 상수, 모든 논리 연산자 등이 없는 집계 함수
예를 들어 CUBE, ROLLUP, 외부 조인, 모듈로 연산자(%), 비트 단위 연산자, 문자열 함수, 산술 시스템 함수 등을 포함하는 작업을 제외한 모든 작업이 SQL Server가 아닌 ISO 초급 단계 공급자로 위임됩니다.
데이터 정렬 호환성
분산 쿼리의 경우에는 로컬 SQL Server 인스턴스의 문자 집합과 정렬 순서에 의해 모든 문자 데이터에 대한 비교 기능이 정의됩니다. SQL Server는 여러 데이터 정렬을 지원합니다. 각 열마다 데이터 정렬이 다를 수 있으며 각 문자 값에 연결된 데이터 정렬 속성이 있습니다. SQL Server는 원격 데이터 원본에서 제공된 문자 데이터의 데이터 정렬 속성을 해석하고 적절하게 처리합니다. 원격 열의 데이터 정렬에 대한 자세한 내용은 분산 쿼리의 데이터 정렬를 참조하십시오.
SQL Server는 다음 사항을 결정할 수 있는 경우에만 문자 열에 대한 비교 및 ORDER BY 작업을 공급자에게 위임할 수 있습니다.
원본으로 사용하는 데이터 원본은 열의 데이터 정렬 시퀀스와 문자 집합을 사용합니다.
문자 비교 기능은 ISO 및 SQL Server 표준을 따릅니다.
분산 쿼리의 데이터 정렬 항목에서는 SQL Server에서 각 열에 대한 데이터 정렬을 결정하는 방법에 대해 간단히 설명합니다. 원격 데이터 원본에서 해당 데이터 정렬을 지원하면 공급자의 데이터 정렬이 호환되는 것으로 간주됩니다.
그 밖의 SQL 지원 고려 사항
다음은 SQL 언어 수준으로 지정되지 않는 SQL 구문 요소입니다.
중첩 쿼리 지원
공급자가 중첩 쿼리(하위 쿼리)를 지원하는 경우에는 SQL Server가 이러한 작업을 공급자에게 위임할 수 있습니다. 중첩 쿼리 지원은 OLE DB 속성으로부터 자동으로 결정될 수 없으므로, 시스템 관리자가 NestedQueries 공급자 옵션을 설정하여 공급자가 중첩 쿼리를 지원하는 것을 SQL Server에 표시해야 합니다.
매개 변수 표식 지원
공급자가 쿼리에서 ? 매개 변수 표식을 사용하여 매개 변수가 있는 쿼리 실행을 지원하는 경우에는 SQL Server가 매개 변수가 있는 쿼리 실행을 공급자에게 위임할 수 있습니다. 매개 변수 표식 지원은 OLE DB 속성으로부터 자동으로 결정될 수 없으므로, 시스템 관리자가 DynamicParameters 공급자 옵션을 설정하여 공급자가 매개 변수 표식을 지원하는 것을 SQL Server에 표시해야 합니다.
LIKE 지원
공급자가 SQL Server 구문 및 기능으로 구현되는 LIKE 연산자를 지원하는 경우 SqlServerLike 공급자 옵션을 설정하여 지원 여부를 표시할 수 있습니다.
이러한 공급자 옵션 설정에 대한 자세한 내용은 분산 쿼리를 위한 OLE DB 공급자 구성을 참조하십시오.
인덱싱된 액세스
SQL Server는 인덱스 공급자의 인덱스 사용이 수반되는 실행 전략을 사용하여 원격 테이블에 대해 조건자를 평가하고 정렬 작업을 수행할 수 있습니다. 공급자에 대한 인덱싱된 액세스를 설정하려면 IndexAsAccessPath 공급자 옵션을 설정합니다.
뿐만 아니라, 문자 열이 수반되는 인덱스를 사용할 때는 해당 연결된 서버에 대해 collation compatible 연결된 서버 구성 옵션을 true로 설정합니다. 자세한 내용은 sp_serveroption(Transact-SQL)을 참조하십시오.
[!참고]
주어진 분산 쿼리에 대한 실행 계획을 결정하기 위해 SQL Server Management Studio를 사용하여 실행 계획을 그래픽으로 표시합니다. 실행 계획에 원격 쿼리 실행을 사용하면 실행 계획이 Remote Query 논리 및 물리 연산자를 사용하여 표시됩니다. 이 연산자의 인수는 원격으로 실행되는 쿼리를 나타냅니다.