계산 열의 인덱스

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

다음 요구 사항이 충족되는 한 계산 열에서 인덱스를 정의할 수 있습니다.

  • 소유권 요구 사항
  • 결정성 요구 사항
  • 정밀도 요구 사항
  • 데이터 형식 요구 사항
  • SET 옵션 요구 사항

참고 항목

SET QUOTED_IDENTIFIERON 는 계산 열 또는 인덱싱된 뷰에서 인덱스를 만들거나 변경할 때여야 합니다. 자세한 내용은 SET QUOTED_IDENTIFIER(Transact-SQL)를 참조하세요.

소유권 요구 사항

계산 열의 모든 함수 참조는 테이블과 동일한 소유자여야 합니다.

결정성 요구 사항

지정된 입력 집합에 대해 항상 같은 결과 집합을 반환하는 식은 결정적입니다. COLUMNPROPERTY 함수의 속성은 IsDeterministic computed_column_expression 결정적인지 여부를 보고합니다.

computed_column_expression 결정적이어야 합니다. computed_column_expression은 다음과 같은 모든 조건이 충족되는 경우 결정적입니다.

  • 식에서 참조하는 모든 함수는 결정적이고 정확합니다. 이러한 함수에는 사용자 정의 함수와 기본 제공 함수가 모두 포함됩니다. 자세한 내용은 Deterministic and Nondeterministic Functions을 참조하세요. 계산 열이 .인 경우 함수가 정확하지 않을 수 있습니다 PERSISTED. 자세한 내용은 이 문서의 후반부에 지속형 계산 열에 대한 인덱스 만들기를 참조하세요.

  • 식에서 참조되는 모든 열은 계산 열이 포함된 테이블에서 가져옵니다.

  • 열 참조가 여러 행에서 데이터를 끌어오지 않습니다. 예를 들어 여러 행의 데이터와 같은 SUM 집계 함수를 사용하거나 AVG 종속하며 computed_column_expression 비결정적으로 만듭니다.

  • computed_column_expression 시스템 데이터 액세스 또는 사용자 데이터 액세스 권한이 없습니다.

CLR(공용 언어 런타임) 식을 포함하는 계산 열은 결정적이어야 하며 열을 인덱싱하기 전에 표시 PERSISTED 해야 합니다. CLR 사용자 정의 형식 식은 계산 열 정의에서 허용됩니다. 형식이 CLR 사용자 정의 형식인 계산 열은 형식이 비교할 수 있는 한 인덱싱할 수 있습니다. 자세한 내용은 CLR 사용자 정의 형식을 참조하세요.

CAST 및 CONVERT

SQL Server의 인덱싱된 계산 열에서 날짜 데이터 형식의 문자열 리터럴을 참조하는 경우 결정적 날짜 형식 스타일을 사용하여 리터럴을 원하는 날짜 형식으로 명시적으로 변환하는 것이 좋습니다. 결정적 날짜 서식 스타일 목록은 CAST 및 CONVERT를 참조 하세요.

자세한 내용은 날짜 값으로 리터럴 날짜 문자열의 비결정적 변환을 참조하세요.

호환성 수준

호환성 수준을 이전으로 설정하지 않는 한 데이터 정렬 간에 유니코드가 아닌 문자 데이터의 암시적 변환은 비결정적인 것으로 80 간주됩니다.

데이터베이스 호환성 수준 설정인 경우 90이러한 식을 포함하는 계산 열에 인덱스를 만들 수 없습니다. 그러나 업그레이드된 데이터베이스에서 이러한 식을 포함하는 기존 계산 열은 유지 관리할 수 있습니다. 암시적 문자열에서 날짜 변환으로의 변환이 포함된 인덱싱된 계산 열을 사용하는 경우 인덱스 손상 가능성을 방지하려면 데이터베이스 및 애플리케이션에서 해당 설정과 DATEFORMAT 설정이 LANGUAGE 일치하는지 확인합니다.

호환성 수준은 90 SQL Server 2005(9.x)에 해당합니다.

정밀도 요구 사항

computed_column_expression 정확해야 합니다. 다음 중 하나 이상이 true인 경우 computed_column_expression 정확합니다.

  • float 또는 real 데이터 형식의 식이 아닙니다.

  • 해당 정의에는 float 또는 real 데이터 형식을 사용하지 않습니다. 예를 들어 다음 문에서 열 y정형 적이고 결정적이지만 정확하지는 않습니다.

    CREATE TABLE t2 (a int, b int, c int, x float,
        y AS CASE x
              WHEN 0 THEN a
              WHEN 1 THEN b
              ELSE c
          END);
    

참고 항목

모든 float 또는 real 식은 부정확한 것으로 간주되며 인덱스의 키가 될 수 없습니다. float 또는 real 식은 인덱싱된 뷰에서 사용할 수 있지만 키로 사용할 수는 없습니다. 계산 열의 경우도 마찬가지입니다. 모든 함수, 식 또는 사용자 정의 함수는 부동 또는실제 식이 포함된 경우 정확하지 않은 것으로 간주됩니다. 여기에는 논리적 항목(비교)이 포함됩니다.

함수의 COLUMNPROPERTY 속성은 IsPrecise computed_column_expression 정확한지 여부를 보고합니다.

데이터 형식 요구 사항

  • 계산 열에 대해 정의된 computed_column_expression 텍스트, ntext 또는 이미지 데이터 형식으로 평가할 수 없습니다.
  • 계산 열 데이터 형식이 인덱스 키 열로 허용되는 한 이미지, ntext, text, varchar(max), nvarchar(max), varbinary(max)xml 데이터 형식에서 파생된 계산 열을 인덱싱할 수 있습니다.
  • image, ntexttext 데이터 형식에서 파생된 계산 열의 경우 해당 데이터 형식을 키가 아닌 인덱스 열로 사용할 수 있으면 비클러스터형 인덱스에서 키가 아닌(포함된) 열이 될 수 있습니다.

SET 옵션 요구 사항

  • ANSI_NULLS 연결 수준 옵션은 계산 열을 정의하는 문 또는 ALTER TABLE 문이 실행될 때 CREATE TABLE 로 설정 ON 해야 합니다. OBJECTPROPERTY 함수는 옵션이 속성을 통해 설정되었는지 여부를 보고합니다IsAnsiNullsOn.

  • 인덱스가 만들어지는 연결과 인INSERTUPDATE덱스의 값을 변경하는 모든 연결 또는 DELETE 인덱스의 값을 변경하는 문에는 6개의 SET 옵션이 설정되어 ON 있어야 하며 하나의 옵션이 설정OFF되어야 합니다. 최적화 프로그램은 동일한 옵션 설정이 없는 연결에 의해 실행되는 문 SELECT 에 대해 계산 열의 인덱스를 무시합니다.

    NUMERIC_ROUNDABORT 옵션은 다음 옵션으로 OFF설정해야 하며 다음 옵션으로 ON설정해야 합니다.

    • ANSI_NULLS
    • ANSI_PADDING
    • ANSI_WARNINGS
    • ARITHABORT
    • CONCAT_NULL_YIELDS_NULL
    • QUOTED_IDENTIFIER

참고 항목

ANSI_WARNINGSON 데이터베이스 호환성 수준을 설정하거나 그 이상으로 설정할 때 암시적으로 설정하도록 90 설정합니다 ARITHABORTON.

지속형 계산 열에 인덱스 만들기

경우에 따라 아직 결정적이지만 정확하지 않은 식으로 정의된 계산된 열을 만들 수 있습니다. 열이 or ALTER TABLE 문에 CREATE TABLE 표시 PERSISTED 되면 이 작업을 수행할 수 있습니다.

즉, 데이터베이스 엔진 은 계산된 값을 테이블에 저장하고 계산 열이 종속된 다른 열이 업데이트되면 해당 값을 업데이트합니다. 데이터베이스 엔진 은 열에 인덱스를 만들 때와 이 인덱스가 쿼리에서 참조될 때 이러한 지속형 값을 사용합니다.

이 옵션을 사용하면 데이터베이스 엔진이 계산 열 식을 반환하는 함수, 특히 .NET Framework에서 만든 CLR 함수가 결정적이고 정확한지 여부를 정확하게 증명할 수 없는 경우 계산 열에 인덱스를 만들 수 있습니다.

참고 항목

계산 열에는 필터링된 인덱 스만 만들 수 없습니다.

다음 단계