포함된 열을 사용하여 인덱스 만들기

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

이 항목에서는 SQL Server Management Studio 또는 Transact-SQL을 사용하여 포함된(또는 키가 아닌) 열을 추가하여 SQL Server에서 비클러스터형 인덱스의 기능을 확장하는 방법에 대해 설명합니다. 키가 아닌 열을 포함하면 더 많은 쿼리를 포함하는 비클러스터형 인덱스를 만들 수 있습니다. 키가 아닌 열에는 다음과 같은 이점이 있기 때문입니다.

  • 인덱스 키 열로 허용되지 않는 데이터 형식일 수 있습니다.
  • 인덱스 키 열 또는 인덱스 키 크기의 수를 계산할 때 데이터베이스 엔진에서 고려하지 않습니다.

키가 아닌 열이 있는 인덱스는 쿼리의 모든 열이 키 또는 키가 아닌 열로 인덱스에 포함될 때 쿼리 성능을 크게 향상시킬 수 있습니다. 쿼리 최적화 프로그램에서 인덱스 내의 모든 열 값을 찾을 수 있으므로 성능이 향상됩니다. 테이블 또는 클러스터형 인덱스 데이터에 액세스하지 않아 디스크 I/O 작업이 줄어듭니다.

참고 항목

인덱스에 쿼리에서 참조하는 모든 열이 포함된 경우 일반적으로 쿼리를 포함하는 것으로 지칭됩니다.

시작하기 전에

디자인 권장 구성

  • 검색 및 조회에 사용되는 열만 키 열이 되도록 인덱스 키 크기가 큰 비클러스터형 인덱스를 다시 디자인합니다. 쿼리를 포함하는 다른 모든 열을 키가 아닌 열로 만듭니다. 이러한 방식으로 쿼리를 다루는 데 필요한 모든 열이 있지만 인덱스 키 자체는 작고 효율적입니다.

  • 최대 32개의 키 열과 최대 인덱스 키 크기 1,700바이트(SQL Server 2016(13.x) 이전의 키 열 16개 및 900바이트)의 현재 인덱스 크기 제한을 초과하지 않도록 비클러스터형 인덱스에 키가 아닌 열을 포함합니다. 데이터베이스 엔진은 인덱스 키 열 또는 인덱스 키 크기의 수를 계산할 때 키가 아닌 열을 고려하지 않습니다.

  • 인덱스 정의에서 키가 아닌 열의 순서는 인덱스를 사용하는 쿼리의 성능에 영향을 주지 않습니다.

  • 포함된 열이 기본 테이블 열의 좁은 하위 집합을 나타내지 않는 매우 넓은 비클러스터형 인덱스를 사용하지 마세요. 와이드 인덱스를 추가하는 경우 항상 하나의 추가 와이드 인덱스를 업데이트하는 비용이 테이블에서 직접 읽는 비용을 상쇄하는지 확인합니다.

제한 사항

  • 키가 아닌 열은 비클러스터형 인덱스에만 정의할 수 있습니다.

  • text, ntextimage 를 제외한 모든 데이터 형식을 키가 아닌 열로 사용할 수 있습니다.

  • 결정적이면서 정확하거나 정확하지 않은 계산 열은 키가 아닌 열이 될 수 있습니다. 자세한 내용은 Indexes on Computed Columns을 참조하세요.

  • 이미지, ntext텍스트 데이터 형식에서 파생된 계산 열은 계산 열 데이터 형식이 키가 아닌 인덱스 열로 허용되는 한 키가 아닌 열일 수 있습니다.

  • 테이블의 인덱스를 먼저 삭제하지 않으면 키가 아닌 열을 테이블에서 삭제할 수 없습니다.

  • 다음을 수행하는 것 외에는 키가 아닌 열을 변경할 수 없습니다.

    • 열의 null 허용도를 NOT NULL에서 NULL로 변경합니다.

    • varchar, nvarchar 또는 varbinary 열의 길이를 늘입니다.

보안

사용 권한

테이블이나 뷰에 대한 ALTER 권한이 필요합니다. 사용자는 sysadmin 고정 서버 역할의 멤버 또는 db_ddladmindb_owner 고정 데이터베이스 역할의 멤버여야 합니다.

SQL Server Management Studio 사용

키가 아닌 열이 있는 인덱스를 만들려면

  1. 개체 탐색기에서 더하기 기호를 클릭하여 키가 아닌 열이 있는 인덱스를 만들려는 테이블이 포함된 데이터베이스를 확장합니다.

  2. 더하기 기호를 클릭하여 테이블 폴더를 확장합니다 .

  3. 더하기 기호를 클릭하여 키가 아닌 열이 있는 인덱스를 만들 테이블을 확장합니다.

  4. 인덱스 폴더를 마우스 오른쪽 단추로 클릭하고 새 인덱스를 가리킨 다음 비클러스터형 인덱스를 선택합니다.

  5. 새 인덱스 대화 상자의 일반 페이지에서 인덱스 이름 상자에 새 인덱스의 이름을 입력합니다.

  6. 인덱스 키 열 탭에서 추가...를 클릭합니다.

  7. table_name에서 열 선택 대화 상자에서 인덱스에 추가할 테이블 열의 확인란을 선택합니다.

  8. 확인을 클릭합니다.

  9. 포괄 열 탭 아래에서 추가...를 클릭합니다.

  10. table_name 열 선택 대화 상자에서인덱스에 키가 아닌 열로 추가할 테이블 열 또는 열의 확인란 또는 확인란을 선택합니다.

  11. 확인을 클릭합니다.

  12. 인덱스 대화 상자에서 확인을 클릭합니다.

Transact-SQL 사용

키가 아닌 열이 있는 인덱스를 만들려면

  1. 개체 탐색기에서 데이터베이스 엔진인스턴스에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다.

    USE AdventureWorks2022;  
    GO  
    -- Creates a nonclustered index on the Person.Address table with four included (nonkey) columns.   
    -- index key column is PostalCode and the nonkey columns are  
    -- AddressLine1, AddressLine2, City, and StateProvinceID.  
    CREATE NONCLUSTERED INDEX IX_Address_PostalCode  
    ON Person.Address (PostalCode)  
    INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);  
    GO  
    

CREATE INDEX(Transact-SQL)
SQL Server 인덱스 디자인 가이드