SQL Server 2016:内存列存储索引
2015-06-05 10:34
232 查看
SQL Server 2016:内存列存储索引
SQL Server 2016的一项新特性是可以在“内存优化表(Memory Optimized Table)”上添加“列存储索引(Columnstore Index)”。要理解这是什么意思,我们应该首先解释术语列存储索引和内存优化表。
列存储索引是一种按照列而不是行组织数据的索引。每个数据块只存储一个列的数据,最多包含100万行。因此,如果数据为5列1000万行,那么就需要存储在50个数据块中。当只查询部分列时,这种数据组织策略特别有效,因为数据库不会从磁盘读取用户不关心的列。
列存储索引比表扫描要快得多,但没有传统的B树索引那么快。这特别适合于那种无法预测需要什么索引的即时报表。
内存优化表正如它的名字, 它是一个经过优化并一直驻留在内存中的表。这有许多好处,比如锁无关写,但它也有很大的局限性。比如,只允许有8个索引,这对于用于即时查询的表而言限制太大。
SQL Server 2016部分地弥补了这种限制,它允许那8个索引中的其中一个为列存储索引。但要遵循如下规则:
像内存优化表上的其它索引一样,列存储索引必须在表创建时定义。
列存储索引必须包含基表中的所有列。(在普通表上的列存储索引不存在这种限制。)
列存储索引必须包含基表中的所有行。换言之,它不能是“筛选索引(filtered index)”。
一个与内存优化表相关的特性是创建本地编译查询。数据库使用C编译器将这些查询编译成了机器码,而不使用SQL Server解释器。使用列存储索引的查询可以使用这个选项,而不用总是通过解释器运行。
查看英文原文:SQL Server 2016: In-Memory Columnstore Indexes
SQL Server 2016的一项新特性是可以在“内存优化表(Memory Optimized Table)”上添加“列存储索引(Columnstore Index)”。要理解这是什么意思,我们应该首先解释术语列存储索引和内存优化表。
列存储索引是一种按照列而不是行组织数据的索引。每个数据块只存储一个列的数据,最多包含100万行。因此,如果数据为5列1000万行,那么就需要存储在50个数据块中。当只查询部分列时,这种数据组织策略特别有效,因为数据库不会从磁盘读取用户不关心的列。
列存储索引比表扫描要快得多,但没有传统的B树索引那么快。这特别适合于那种无法预测需要什么索引的即时报表。
内存优化表正如它的名字, 它是一个经过优化并一直驻留在内存中的表。这有许多好处,比如锁无关写,但它也有很大的局限性。比如,只允许有8个索引,这对于用于即时查询的表而言限制太大。
SQL Server 2016部分地弥补了这种限制,它允许那8个索引中的其中一个为列存储索引。但要遵循如下规则:
像内存优化表上的其它索引一样,列存储索引必须在表创建时定义。
列存储索引必须包含基表中的所有列。(在普通表上的列存储索引不存在这种限制。)
列存储索引必须包含基表中的所有行。换言之,它不能是“筛选索引(filtered index)”。
一个与内存优化表相关的特性是创建本地编译查询。数据库使用C编译器将这些查询编译成了机器码,而不使用SQL Server解释器。使用列存储索引的查询可以使用这个选项,而不用总是通过解释器运行。
查看英文原文:SQL Server 2016: In-Memory Columnstore Indexes
相关文章推荐
- 前台、后台、mysql,出现中文乱码或“???”
- C#操作SQLite方法实例详解
- Log4j写入数据库详解
- 为什么不能用memcached存储Session?
- 为什么不能用memcached存储Session?
- redis作为mysql的缓存服务器(读写分离)
- 58数据库重建表空间记录
- mysql多表查询、子查询
- C#调用SQLite的方法实例分析
- Mysql事务,并发问题,锁机制
- Mysql慢查询配置
- 【转】数据库SQL的一些总结
- Oracle RAC 基本概念及入门
- CentOS环境PHP安装memcache扩展
- Redis Sentinel机制与用法(二)
- Oracle PL/SQL _5_变量命名方法
- Core Data概述
- Mysql中事务隔离级别与binlog_format的一点理解
- windows7安装oracle安装提示:指定的SID在本机上已经存在的解决方法汇总
- mysql事务和锁InnoDB