SQL Server 2012 通过采用列式存储的索引,大大提高了数据仓库的查询效率。这种全新的索引与其它新功能相结合,在一些特定应用场景下可以将数据仓库的查询性能提高数百倍甚至数千倍,对于一些决策支持类的查询,通常也可以达到10倍左右的性能提升。这些性能的提升,都是通过大家所熟悉的T-SQL语句以及SQL Server管理界面所实现的,因此可以和包括SQL Server Reporting Services在内的所有报表解决方案完全兼容。

列式索引将每一列单独存储在一组磁盘页中,而不是像传统方式那样在每个页中存储多个行。我们通常使用“行存储”来描述每个页中包含多行数据的堆或者B树结构。采用列式存储时,列将存储在不同的页组中,这样存储将带来以下好处:

. 只有查询所涉及到的列才会从磁盘中获取出来(在典型的事实数据表中,查询所涉及到的列不会超过总列数的15%)
. 由于每个列中都会有大量重复数据,因此这种数据结构更便于进行压缩
. 数据经过高度压缩后,缓冲区的命中率将大大提高,并且访问频繁的列将缓存在内存中,而访问不频繁的列则不会长时间占用内存

SQL Server 2012 列式索引采用“纯粹”的列式存储,而非混合模式,因为不同列中的所有数据将会分开存储在不同的页中,这样一来I/O扫描的性能以及缓冲区的命中率将会大幅提升。SQL Server是大型数据库产品中第一个支持纯列式索引的产品。虽然其它厂商声称市场上大规模使用的数据库产品不可能提供纯列式存储技术,但很荣幸我们做到了这一点!

使用列式索引

为了提高查询性能,您所要做的就是针对数据仓库中的事实表创建列式索引。如果有非常大的维度表(比如超过1000万条记录),您可以为其创建列式索引。接下来,您只需要向SQL Server提交查询,然后查询的速度将会大大加快。