Columnstore 인덱스 - 새로운 기능Columnstore indexes - what's new

이 항목 적용 대상: 예SQL Server예Azure SQL 데이터베이스예Azure SQL 데이터 웨어하우스 예 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

각 버전의 SQL ServerSQL Server에 사용할 수 있는 columnstore 기능과 최신 버전의 Azure SQL Database Premium Edition, Azure SQL Data Warehouse 및 Parallel Data Warehouse에 대한 요약입니다.Summary of columnstore features available for each version of SQL ServerSQL Server, and the latest releases of Azure SQL Database Premium Edition, Azure SQL Data Warehouse, and Parallel Data Warehouse.

참고

Azure SQL Database의 경우 Premium Edition에서만 columnstore 인덱스를 사용할 수 있습니다.For Azure SQL Database, columnstore indexes are only available in Premium Edition.

제품 릴리스에 대한 기능 요약Feature Summary for Product Releases

이 테이블은 Columnstore 인덱스 및 이를 사용할 수 있는 제품에 대한 주요 기능을 요약합니다.This table summarizes key features for columnstore indexes and the products in which they are available.

Columnstore 인덱스 기능Columnstore Index Feature SQL Server 2012SQL Server 2012 SQL Server 2014SQL Server 2014 SQL Server 2016SQL Server 2016 SQL Server 2017SQL Server 2017 SQL 데이터베이스SQL Database Premium Edition Premium Edition SQL 데이터 웨어하우스SQL Data Warehouse
다중 스레드 쿼리에 대한 일괄 처리 실행Batch execution for multi-threaded queries yes yes yes yes yes yes
단일 스레드 쿼리에 대한 일괄 처리 실행Batch execution for single-threaded queries yes yes yes yes
보관 압축 옵션입니다.Archival compression option. yes yes yes yes yes
스냅숏 격리 및 커밋된 읽기 스냅숏 격리Snapshot isolation and read-committed snapshot isolation yes yes yes yes
테이블을 만들 때 columnstore 인덱스를 지정합니다.Specify columnstore index when creating a table. yes yes yes yes
AlwaysOn은 columnstore 인덱스를 지원합니다.AlwaysOn supports columnstore indexes. yes yes yes yes yes yes
AlwaysOn 읽기 가능한 보조는 읽기 전용 비클러스터형 columnstore 인덱스 지원AlwaysOn readable secondary supports read-only nonclustered columnstore index yes yes yes yes yes yes
AlwaysOn 읽기 가능한 보조는 업데이트할 수 있는 columnstore 인덱스를 지원합니다.AlwaysOn readable secondary supports updateable columnstore indexes. yes yes
힙 또는 btree에 대한 읽기 전용 비클러스터형 columnstore 인덱스입니다.Read-only nonclustered columnstore index on heap or btree. yes yes yes yes yes yes
힙 또는 btree에 대해 업데이트할 수 있는 비클러스터형 columnstore 인덱스Updateable nonclustered columnstore index on heap or btree yes yes yes yes
비클러스터형 columnstore 인덱스를 가진 힙 또는 btree에 사용할 수 있는 추가 btree 인덱스입니다.Additional btree indexes allowed on a heap or btree that has a nonclustered columnstore index. yes yes yes yes yes yes
업데이트할 수 있는 클러스터형 columnstore 인덱스입니다.Updateable clustered columnstore index. yes yes yes yes yes
클러스터형 columnstore 인덱스에 대한 btree 인덱스입니다.Btree index on a clustered columnstore index. yes yes yes yes
메모리 최적화 테이블에 대한 columnstore 인덱스입니다.Columnstore index on a memory-optimized table. yes yes yes yes
비클러스터형 columnstore 인덱스 정의는 필터링된 조건 사용을 지원합니다.Nonclustered columnstore index definition supports using a filtered condition. yes yes yes yes
CREATE TABLE 및 ALTER TABLE의 columnstore 인덱스에 대한 압축 지연 옵션입니다.Compression delay option for columnstore indexes in CREATE TABLE and ALTER TABLE. yes yes yes yes
Columnstore 인덱스에는 비지속형 계산 열이 있을 수 있습니다.Columnstore index can have a non-persisted computed column. yes

읽기 가능한 비클러스터형 columnstore 인덱스를 만들려면 읽기 전용 파일 그룹에 인덱스를 저장합니다.To create a readable nonclustered columnstore index, store the index on a read-only filegroup.

SQL Server 2017SQL Server 2017

SQL Server 2017SQL Server 2017에서는 이러한 새 기능을 추가합니다. adds these new features.

기능Functional

  • SQL Server 2017SQL Server 2017에서는 클러스터형 columnstore 인덱스에서 비지속형 계산 열을 지원합니다. supports non-persisted computed columns in clustered columnstore indexes. 지속형 열은 클러스터형 columnstore 인덱스에서 지원되지 않습니다. 계산 열이 있는 columnstore 인덱스에는 비클러스터형 인덱스를 만들 수 없습니다.Persisted columns are not supported in clustered columnstore indexes.You cannot create a nonclustered index on a columnstore index that has a computed column.

SQL Server 2016SQL Server 2016

SQL Server 2016SQL Server 2016 는 columnstore 인덱스의 성능 및 유연성을 개선하기 위해 주요 향상 기능을 추가합니다. adds key enhancements to improve the performance and flexibility of columnstore indexes. 이러한 향상된 기능을 통해 데이터 웨어하우징 시나리오가 향상되며 실시간 운영 분석이 가능합니다.These improvements enhance data warehousing scenarios and enable real-time operational analytics.

기능Functional

  • Rowstore 테이블에는 업데이트할 수 있는 비클러스터형 columnstore 인덱스 한 개가 있을 수 있습니다.A rowstore table can have one updateable nonclustered columnstore index. 이전에는 비클러스터형 columnstore 인덱스가 읽기 전용이었습니다.Previously, the nonclustered columnstore index was read-only.

  • 비클러스터형 columnstore 인덱스 정의는 필터링된 조건 사용을 지원합니다.The nonclustered columnstore index definition supports using a filtered condition. OLTP 테이블에 columnstore 인덱스를 추가할 경우 성능에 미치는 영향을 최소화하려면 필터링된 조건을 사용하여 운영 워크로드의 콜드 데이터에 대해서만 비클러스터형 columnstore 인덱스를 만듭니다.To minimize the performance impact of adding a columnstore index on an OLTP table, use a filtered condition to create a nonclustered columnstore index on only the cold data of your operational workload.

  • 메모리 내 테이블에는 columnstore 인덱스가 한 개만 있을 수 있습니다.An in-memory table can have one columnstore index. 테이블을 만들 때 이 인덱스를 만들거나 나중에 ALTER TABLE(Transact-SQL)을 사용하여 추가할 수 있습니다.You can create it when the table is created or add it later with ALTER TABLE (Transact-SQL). 이전에는 디스크 기반 테이블에만 columnstore 인덱스가 있을 수 있었습니다.Previously, only a disk-based table could have a columnstore index.

  • 클러스터형 columnstore 인덱스에 하나 이상의 비클러스터형 rowstore 인덱스가 있을 수 있습니다.A clustered columnstore index can have one or more nonclustered rowstore indexes. 이전에 columnstore 인덱스는 비클러스터형 인덱스를 지원하지 않았습니다.Previously, the columnstore index did not support nonclustered indexes. SQL Server는 DML 작업에 대해 비클러스터형 인덱스를 자동으로 유지 관리합니다.SQL Server automatically maintains the nonclustered indexes for DML operations.

  • 기본 키 및 외래 키에 대해 btree 인덱스를 사용하여 클러스터형 columnstore 인덱스에 이러한 제약 조건의 적용을 지원합니다.Support for primary keys and foreign keys by using a btree index to enforce these constraints on a clustered columnstore index.

  • Columnstore 인덱스에는 트랜잭션 워크로드가 실시간 운영 분석에 미치는 영향을 최소화하는 압축 지연 옵션이 있습니다.Columnstore indexes have a compression delay option that minimizes the impact of the transactional workload on real-time operational analytics. 이 옵션을 사용하여 자주 변하는 행을 columnstore로 압축하기 전에 안정화할 수 있습니다.This option allows for frequently changing rows to stabilize before compressing them into the columnstore. 자세한 내용은 CREATE COLUMNSTORE INDEX(Transact-SQL)실시간 운영 분석을 위한 Columnstore 시작을 참조하세요.For details, see CREATE COLUMNSTORE INDEX (Transact-SQL) and Get started with Columnstore for real-time operational analytics.

데이터베이스 호환성 수준 120 또는 130에 대한 성능Performance for database compatibility level 120 or 130

  • Columnstore 인덱스는 읽기 커밋된 스냅숏 격리 수준(RCSI) 및 스냅숏 격리(SI)를 지원합니다.Columnstore indexes support read committed snapshot isolation level (RCSI) and snapshot isolation (SI). 이를 통해 트랜잭션을 잠금이 없는 분석 쿼리와 일관성을 유지할 수 있습니다.This enables transactional consistent analytics queries with no locks.

  • Columnstore는 인덱스를 명시적으로 다시 만들 필요 없이 삭제된 행을 제거하여 인덱스 조각 모음을 지원합니다.Columnstore supports index defragmentation by removing deleted rows without the need to explicitly rebuild the index. ALTER INDEX ...The ALTER INDEX … REORGANIZE 문은 내부에서 정의한 정책을 바탕으로 columnstore에서 온라인 작업으로 삭제된 행을 제거함REORGANIZE statement removes deleted rows, based on an internally defined policy, from the columnstore as an online operation

  • Columnstore 인덱스는 AlwaysOn 읽기 가능 보조 복제본에 대한 액세스일 수 있습니다.Columnstore indexes can be access on an AlwaysOn readable secondary replica. 분석 쿼리를 AlwaysOn 보조 복제본으로 분산하여 운영 분석의 성능을 개선할 수 있습니다.You can improve performance for operational analytics by offloading analytics queries to an AlwaysOn secondary replica.

  • 성능 향상을 위해 SQL ServerSQL Server은 데이터 형식이 8바이트 이하를 사용하고 문자열 형식이 아닌 경우 테이블 검색 중에 집계 함수 MIN, MAX, SUM, COUNT, AVG를 계산합니다.To improve performance, SQL ServerSQL Server computes the aggregate functions MIN, MAX, SUM, COUNT, AVG during table scans when the data type uses no more than 8 bytes, and is not of a string type. 클러스터형 columnstore 인덱스 및 비클러스터형 columnstore 인덱스 둘 다에 대해 Group By 절을 사용하거나 사용하지 않는 집계 푸시다운을 지원합니다.Aggregate pushdown is supported with or without Group By clause for both clustered columnstore indexes and nonclustered columnstore indexes.

  • 조건자 푸시다운은 [v]char 또는 n[v]char 형식의 문자열을 비교하는 쿼리의 속도를 향상시킵니다.Predicate pushdown speeds up queries that compare strings of type [v]char or n[v]char. 이는 일반적인 비교 연산자에 적용되며 비트맵 필터를 사용하는 LIKE와 같은 연산자를 포함합니다.This applies to the common comparison operators and includes operators such as LIKE that use bitmap filters. 이는 SQL Server가 지원하는 모든 데이터 정렬에서 작동합니다.This works with all collations that SQL Server supports.

데이터베이스 호환성 수준 130에 대한 성능Performance for database compatibility level 130

  • 다음 연산 중 하나 이상을 사용하는 쿼리에 대한 새 일괄 처리 모드 실행 지원:New batch mode execution support for queries using any of these operations:

    • SORTSORT

    • 여러 가지 고유 함수를 사용하여 집계합니다.Aggregates with multiple distinct functions. 몇 가지 예: COUNT/COUNT, AVG/SUM, CHECKSUM_AGG, STDEV/STDEVP.Some examples: COUNT/COUNT, AVG/SUM, CHECKSUM_AGG, STDEV/STDEVP.

    • Window 집계 함수: COUNT, COUNT_BIG, SUM, AVG, MIN, MAX 및 CLR.Window aggregate functions: COUNT, COUNT_BIG, SUM, AVG, MIN, MAX, and CLR.

    • Window 사용자 정의 집계: CHECKSUM_AGG, STDEV, STDEVP, VAR, VARP 및 GROUPING.Window user-defined aggregates: CHECKSUM_AGG, STDEV, STDEVP, VAR, VARP, and GROUPING.

    • Window 집계 분석 함수: LAG< LEAD, FIRST_VALUE, LAST_VALUE, PERCENTILE_CONT, PERCENTILE_DISC, CUME_DIST 및 PERCENT_RANK.Window aggregate analytic functions: LAG< LEAD, FIRST_VALUE, LAST_VALUE, PERCENTILE_CONT, PERCENTILE_DISC, CUME_DIST, and PERCENT_RANK.

  • MAXDOP 1에서 실행되거나 직렬 쿼리 계획을 사용하는 단일 스레드 쿼리는 일괄 처리 모드에서 실행됩니다.Single-threaded queries running under MAXDOP 1 or with a serial query plan execute in batch mode. 이전에는 다중 스레드 쿼리만이 일괄 처리 실행으로 실행되었습니다.Previously-only multi-threaded queries ran with batch execution.

  • 메모리 액세스에 최적화된 테이블 쿼리는 rowstore 또는 columnstore 인덱스의 데이터에 액세스하는 경우 SQL InterOp에 병렬 계획을 가질 수 있습니다.Memory optimized table queries can have parallel plans in SQL InterOp mode both when accessing data in rowstore or in columnstore index

지원 가능성Supportability

이러한 시스템 뷰는 columnstore의 새로운 특징임:These system views are new for columnstore:

제한 사항Limitations

  • MERGE는 클러스터형 columnstore 인덱스에 대해 btree 인덱스가 정의된 경우 비활성화됩니다.MERGE is disabled when a btree index is defined on a clustered columnstore index.

  • 메모리 내 테이블의 경우 columnstore 인덱스는 모든 열을 포함해야 하며, columnstore 인덱스가 필터링된 조건을 가질 수 없습니다.For in-memory tables, a columnstore index must include all the columns; the columnstore index cannot have a filtered condition.

  • 메모리 내 테이블의 경우 columnstore 인덱스에 대한 쿼리는 InterOP 모드에서만 실행되며 메모리 내 고유 모드에서는 실행되지 않습니다.For in-memory tables, queries on columnstore indexes run only in InterOP mode, and not in the in-memory native mode. 병렬 실행은 지원됩니다.Parallel execution is supported.

SQL Server 2014SQL Server 2014

SQL Server 2014에서는 클러스터형 columnstore 인덱스를 기본 저장 형식으로 도입하였습니다.SQL Server 2014 introduced the clustered column store index as the primary storage format. 이를 통해 일반 부하뿐만 아니라 업데이트, 삭제 및 삽입 작업도 사용할 수 있습니다.This allowed regular loads as well as update, delete, and insert operations.

  • 테이블에서 클러스터형 columnstore 인덱스를 기본 테이블 저장소로 사용할 수 있습니다.The table can use a clustered column store index as the primary table storage. 테이블에 다른 인덱스는 허용되지 않지만 클러스터형 columnstore 인덱스는 업데이트가 가능하므로 일반 부하를 수행하고 개별 행을 변경할 수 있습니다.No other indexes are allowed on the table, but the clustered column store index is updateable so you can perform regular loads and make changes to individual rows.

  • 비클러스터형 columnstore 인덱스는 이제 일괄 처리 모드로 실행될 수 있는 추가 연산자를 제외하고 SQL Server 2012에서와 같은 기능을 계속 가지고 있습니다.The nonclustered column store index continues to have the same functionality as in SQL Server 2012 except for additional operators that can now be executed in batch mode. 다시 만들기 및 파티션 전환의 사용을 제외하고 여전히 업데이트는 불가능합니다.It is still not updateable except by rebuilding, and by using partition switching. 비클러스터형 columnstore 인덱스는 디스크 기반 테이블에 대해서만 지원되며 메모리 내 테이블에 대해서는 지원되지 않습니다.The nonclustered columnstore index is supported on disk-based tables only, and not on in-memory tables.

  • 클러스터형 및 비클러스터형 columnstore 인덱스에는 데이터를 추가로 압축하는 보관 압축 옵션이 있습니다.The clustered and nonclustered column store index has an archival compression option that further compresses the data. 보관 옵션은 메모리와 디스크에서 모두 데이터 크기를 줄이는 데 유용하지만 쿼리 성능이 저하됩니다.The archival option is useful for reducing the data size both in memory and on disk, but does slow query performance. 이는 자주 액세스하지 않는 데이터에 적합합니다.It works well for data that is accessed infrequently.

  • 클러스터형 columnstore 인덱스 및 비클러스터형 columnstore 인덱스는 매우 유사하게 작동합니다. 즉, 같은 열 형식 저장소 형식, 같은 쿼리 처리 엔진 및 같은 동적 관리 뷰 집합을 사용합니다.The clustered columnstore index and the nonclustered columnstore index function in a very similar way; they use the same columnar storage format, same query processing engine, and the same set of dynamic management views. 차이점은 기본 인덱스 형식과 보조 인덱스 형식이며 비클러스터형 columnstore 인덱스는 읽기 전용입니다.The difference is primary versus secondary index types, and the nonclustered columnstore index is read-only.

  • 이러한 연산자는 다중 스레드 쿼리, 즉 검색, 필터, 프로젝트, 조인, GROUP BY 및 UNION ALL에 대해 일괄 처리 모드에서 실행됩니다.These operators run in batch mode for multi-threaded queries: scan, filter, project, join, group by, and union all.

SQL Server 2012SQL Server 2012

SQL Server 2012는 columnstore 데이터에 대한 쿼리의 경우 rowstore 테이블 및 일괄 처리에 대한 또 다른 인덱스 형식으로 비클러스터형 columnstore 인덱스를 도입하였습니다.SQL Server 2012 introduced the nonclustered columnstore index as another index type on rowstore tables and batch processing for queries on columnstore data.

  • Rowstore 테이블에는 비클러스터형 columnstore 인덱스 한 개가 있을 수 있습니다.A rowstore table can have one nonclustered columnstore index.

  • columnstore 인덱스는 읽기 전용입니다.The columnstore index is read-only. Columnstore 인덱스를 만든 후에는 삽입, 삭제 및 업데이트 작업에 의해 테이블을 업데이트할 수 없으며, 이러한 작업을 수행하려면 인덱스를 삭제하고 테이블을 업데이트한 다음 columnstore 인덱스를 다시 만들어야 합니다.After you create the columnstore index, you cannot update the table by insert, delete, and update operations; to perform these operations you must drop the index, update the table and rebuild the columnstore index. 파티션 전환을 사용하여 추가 데이터를 테이블에 로드할 수 있습니다.You can load additional data into the table by using partition switching. 파티션 전환의 장점은 columnstore 인덱스를 삭제한 다음 다시 만들지 않고 데이터를 로드할 수 있다는 것입니다.The advantage of partition switching is you can load data without dropping and rebuilding the columnstore index.

  • Columnstore 인덱스는 데이터의 복사본을 저장하기 때문에 이 인덱스를 사용하려면 언제나 추가 저장소, 일반적으로 rowstore보다 10% 더 많은 저장소가 필요합니다.The column store index always requires extra storage, typically an additional 10% over rowstore, because it stores a copy of the data.

  • 일괄 처리는 2배 이상의 쿼리 성능을 제공하지만 병렬 쿼리 실행에만 사용할 수 있습니다.Batch processing provides 2x or better query performance, but it is only available for parallel query execution.

관련 항목:See Also

Columnstore 인덱스 가이드Columnstore Indexes Guide
Columnstore 인덱스 데이터 로드Columnstore Indexes Data Loading
Columnstore 인덱스 쿼리 성능 Columnstore Indexes Query Performance
실시간 운영 분석을 위한 Columnstore 시작 Get started with Columnstore for real-time operational analytics
데이터 웨어하우스용 Columnstore 인덱스Columnstore Indexes for Data Warehousing
Columnstore 인덱스 조각 모음Columnstore Indexes Defragmentation