理解列存储索引

 

版权声明:原创作品,谢绝转载!否则将追究法律责任。            

   

优点和使用场景

SQL Server 内存中列存储索引通过使用基于列的数据存储和基于列的查询处理来存储和管理数据。 列存储索引适合于主要执行大容量加载和只读查询的数据仓库工作负荷。 与传统面向行的存储方式相比,使用列存储索引存档可最多提高 10 倍查询性能,与使用非压缩数据大小相比,可提供多达 7 倍数据压缩率。

SQL 2012和SQL 2014列存储索引的比较

在SQL server 2012中,一旦启用了列存储索引,将不能够对已启用列存储索引的数据存储执行变更写入操作,也就是说列存储索引适合查询只读的或者基本不发生变化的存档数据。一旦对表添加了列存储索引,表就变成了只读的了。如果我们需要进行Insert、Update、Delete等操作,我们需要先禁用列存储索引,然后进行表操作,最后再重建列存储索引。这个特性,使得列存储索引更适合存放静态数据的数据仓库。

但是这一情况在SQL server 2014中已经有所改善。该技术能够将数据仓库的查询性能提升数倍。不同于普通的索引或堆采用B-Tree结构(以行的形式),列存储索引以列的形式存储数据,并使用主动压缩以减少查询请求所需的磁盘I/O。但是在SQL Server 2012中列存储索引仍有很多限制,SQL Server 2014中增强了该技术,并打破之前版本的限制。在SQL Server 2014创建列存储索引时不会影响表的写入功能,这意味着用户可以在一个有列存储索引的表中发出INSERT、UPDATE、DELETE等指令。SQL Server 2012中用户在表里只能创建非聚簇列存储索引,在单一索引中包含表中所有列。SQL Server 2014增加了对创建聚簇列存储索引的支持。用户仍然可以像在SQL Server 2012中那样创建一个非聚簇列存储索引,但是这个非聚簇列存储索引是只读查询,无法更新。只有聚簇列存储索引才可以更新。

参考资料:

http://tech.it168.com/a2013/0829/1527/000001527798.shtml

行存储的缺点

SQL Server在处理查询时通常是提取全部索引页,包括查询中用不到的那部分,也就是说,读取所有列的记录,即便是有些不需要。把不需要的数据读取出来,不仅浪费大量内存,同时也增大I/O,对系统的整体性能有着很大的影响。

列存储的优势

假定我们有一张有3列数据的表,这3列从左往右依次是int、varchar和bool类型,并且该表有100条(行)记录。对于都是int类型的第一列数据,应用压缩算法是很容易的,同时压缩率也会很高。这也将表明,我们不必访问该表的所有列,仅需访问感兴趣的相关列的子集,这从另一方面来讲,可以减少磁盘的I/O、提升缓存,因此,磁盘存储会被更加高效低利用,就像索引维护一样。

列存储索引查询示意图

   

图一(微软官方)

 

clipboard

图二(来源网络)

来源:http://www.uml.org.cn/sjjm/201212141.asp

clipboard[1]

列存储索引能够提供更快查询的三个原因(来源网络)

第一个原因:因为索引中的列数据被压缩了,它占用的空间更小,因此SQL Server只需扫描更少的页。

第二个原因,因为只需要扫描更少的页,SQL Server就可以把它们保留在内存中,大大地提高了数据停留在内存缓冲区的可能性。因此,在那些内存大的系统中,你会看到更大的性能差异,尤其是当索引被扫描多次并且相应的行存储索引不能装入内存时更明显。

第三,SQL Server只需要提取查询中用到的列的索引页,而常规索引需要提取全部索引页,包括查询中用不到的那部分。因此,你又一次得到了益处,更少的页需要处理,就会更快得到结果,同样SQL Server也更可能把列缓存保持在内存缓存区中。

转载于:https://www.cnblogs.com/sthinker/p/6160354.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据开发初学者学习路线

目录前言导读:第一章:初识Hadoop第二章:更高效的WordCount第三章:把别处的数据搞到Hadoop上第四章:把Hadoop上的数据搞到别处去第五章:快一点吧,我的SQL第六章:一夫多妻制第七章&…

安卓屏幕适配问题

屏幕适配是根据屏幕密度,dpi为单位的,而不是分辨率。 手机会根据不同手机的密度,自己去不同资源目录下去找对应的资源 比如:   每个图片目录下的图片资源都是一样的,只是大小不一样   比如drawable-sw800dp-mdpi目录&#xff…

MapReduce原理全剖析

MapReduce剖析图 如上图所示是MR的运行详细过程 首先mapTask读文件是通过InputFormat(内部是调RecordReader()–>read())来一次读一行,返回K,V值。(默认是TextInputFormat,还可以输入其他的类型如:音视频&…

利用selenium webdriver点击alert提示框

在进行元素定位时常常遇到这样的alert框: 那么该如何定位并点击确定或取消按钮呢?stackoverflow上找到了这个问题的答案。 OK, Show you the code: 1 driver.findElement(By.id("updateButton")).click(); 2 //pop up w…

Django的核心思想ORM

元类实现ORM 1. ORM是什么 ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM。 一个句话理解就是:创建一个实例对象,用创建它的类名当做数据表名&#x…

Secondary Namenode的Check point机制以及Namenode、Datanode工作机制说明

目录前言:1、NameNode的工作机制2、DataNode的工作机制3、Secondary Namenode的Check point机制 目录 前言: 在说明checkpoint机制之前,先要了解下namenode、datanode的一些功能和职责。 1、NameNode的工作机制 问题场景: 1…

抓包软件:Charles

修正:手机不必一定连接电脑分享的热点,只需要手机和电脑在同一个局域网下就可以了,手机代理IP设置为电脑的IP。 之前写过一篇通过Wireshark进行抓包,分析网络连接的文章《通过WireShark抓取iOS联网数据实例分析》:htt…

Hive的相关介绍

目录前言:1、Hive简介2、Hive架构3、Hive与Hadoop的关系4、Hive与传统数据库对比5、Hive的数据存储总结: 目录 前言: 为什么使用Hive 直接使用hadoop所面临的问题 人员学习成本太高 项目周期要求太短 MapReduce实现复杂查询逻辑开发难…

Java第五次作业--面向对象高级特性(抽象类和接口)

一、学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握抽象类的设计掌握接口的设计理解简单工厂设计模式理解抽象类和接口的区别掌握包装类的应用掌握对象的比较方法和比较器的使用学习使用日期操作类学习匿名内部类的使用二、作业要求 发布一篇随笔&…

gulp教程之gulp-minify-css【gulp-clean-css】

原文:http://www.ydcss.com/archives/41 简介: 使用gulp-minify-css压缩css文件,减小文件大小,并给引用url添加版本号避免缓存。重要:gulp-minify-css已经被废弃,请使用gulp-clean-css,用法一致…

win7 IE11卸载后无法上网

今天某同事需要访问一个银行网站,必须使用IE8,我在win7中降级IE11,直接卸载了IE11和其语言包,发现IE8再也打不开网页了,每次打开都提示保存html网页。测试Google Chrome上网完全没有问题。IE8的internet选项等任何工具菜单点击均无反应&#…

关于django的模板

模板 问题 如何向请求者返回一个漂亮的页面呢? 肯定需要用到html、css,如果想要更炫的效果还要加入js,问题来了,这么一堆字段串全都写到视图中,作为HttpResponse()的参数吗?这样定义就太麻烦了吧&#x…

Hbase简介及常用命令相关知识总结

文章目录目录前言:1.Hbase简介1.1、什么是Hbase1.2、与传统数据库的对比1.3、Hbase集群中的角色2、Hbase数据模型3、Hbase命令总结:目录 前言: 对于Hbase来说,由于其是基于列的数据库,所以比传统的数据库快许多&…

Storm入门简介

目录前言:1、Storm简介2、Storm与Hadoop的区别3、Storm核心组件4、Storm编程模型5、流式计算一般架构图(重要)总结: 目录 前言: 在介绍Storm之前,先介绍下离线计算。 离线计算:批量获取数据…

前端模板预编译技术

什么是前端模板预编译 前端模板预编译通过预编译技术让前端模板突破浏览器限制,实现后端模板一样的同步“文件”加载能力。它采用目录来组织维护前端模板,从而让前端模板实现工程化管理,最终保证前端模板在复杂单页 web 应用下的可维护性。同…

node08-express

目录:node01-创建服务器 node02-util node03-events node04-buffer node05-fs node06-path node07-http node08-express node09-cookie express模块: 1 /*2 * express是一个应用框架3 * 1、路由4 * 2、中间件5 * 3、模板引擎6 * */7 8 var express requ…

Java基础常见笔试题总结

以下是自己总结的一些Java常见的基础知识题,答案仅供参考,如有异议请指出。一直保持更新状态。 1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编…

各种机器学习开源项目精选TOP30

8800个机器学习开源项目为你精选TOP30! 授权自AI科技大本营(ID: rgznai100) 本文共图文结合,建议阅读5分钟。 本文为大家带来了30个广受好评的机器学习开源项目。 最近,Mybridge发布了一篇文章,对比了过去一年中机…

Tomcat控制台输出到文件

为什么80%的码农都做不了架构师?>>> 修改startup.bat call "%EXECUTABLE%" start %CMD_LINE_ARGS% 为 call "%EXECUTABLE%" run %CMD_LINE_ARGS% >> ..\logs\test.log 转载于:https://my.oschina.net/cccyb/blog/886047

常见算法详解(原理及代码实现Python版本)

文章目录前言1、冒泡排序2、选择排序3、插入排序4、希尔排序5、快速排序6、归并排序7、二分法查找总结前言 最近复习了下常见的算法,在这里手动再写一遍,权当加深自己的印象。代码实现用的是python3.6版本。 1、冒泡排序 原理: 冒泡排序&a…