SQL Server 2016新特性:列存储索引新特性
- 行存储表可以有一个可更新的列存储索引,之前非聚集的列存储索引是只读的。
- 非聚集的列存储索引支持筛选条件。
- 在内存优化表中可以有一个列存储索引,可以在创建表的时候创建,也可以在之后的alter table语句上创建。之前内存优化表不支持列存储索引。
- 聚集的列存储索引可以有多个非聚集行存储索引,之前列存储索引不支持非聚集索引。
- 支持在聚集列存储索引上加入主键和外键约束,约束使用btree索引。
- 列聚集索引有一个压缩延迟选项,让事务复合收到的影响最小。
兼容级别为120,130的数据库性能:
- 列存储索引支持读提交快照隔离级别和快照隔离级别。这样可以让查询保持事务一致性,并且不加锁
- 列存储索引不需要通过重建索引来清理删除的行,可以通过alter table……reorganize语句来清理
- 列存储索引可以在alwayson readable secondary replica中访问。
- 为了提升性能,SQLServer在表扫描的时候会为小于8字节的列计算最大,最新,合计,计数,平均值聚合会被pushdown。
- 在比较字符串类型的时候,条件会被pushdown来提高查询速度。
兼容级别为130的数据库性能:
- 新的batch模式支持一下操作:
- SORT
- 多个聚合函数
- Windows 聚合函数
- Windows用户定义的聚合
- windows聚合分析函数
- 单线程查询可以运行在batch mode
- 当访问的数据是行存储或者列存储,内存优化表查询可以在InterOp模式下并行
支持:
These system views are new for columnstore:
- sys.column_store_row_groups (Transact-SQL)
- sys.dm_column_store_object_pool (Transact-SQL)
- sys.dm_db_column_store_row_group_operational_stats (Transact-SQL)
- sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)
- sys.dm_db_index_operational_stats (Transact-SQL)
- sys.dm_db_index_physical_stats (Transact-SQL)
- sys.internal_partitions (Transact-SQL)
These in-memory OLTP-based DMVs contain updates for columnstore:
- sys.dm_db_xtp_hash_index_stats (Transact-SQL)
- sys.dm_db_xtp_index_stats (Transact-SQL)
- sys.dm_db_xtp_memory_consumers (Transact-SQL)
- sys.dm_db_xtp_nonclustered_index_stats (Transact-SQL)
- sys.dm_db_xtp_object_stats (Transact-SQL)
- sys.dm_db_xtp_table_memory_stats (Transact-SQL)
限制:
- 当btree索引定义在聚集列存储索引时,MERGE被禁用。
- 对于内存优化表,列存储索引必须包含所有的列,也不能使用筛选。
- 对于内存优化表,列存储索引只能在InterOp模式下运行,并且支持并发查询。