理解列存儲索引

?

版權聲明:原創作品,謝絕轉載!否則將追究法律責任。????????????

???

優點和使用場景

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.pswp.cn/news/456727.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456727.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456727.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Django項目部署到阿里云服務器上無法發送郵件STMP

部署好項目之后發送郵件無法發送,多方查閱之后,解決問題。 阿里云服務器禁用了25端口,導致無法發送郵件。 25端口申請開放的難度很大,直接放棄。 解決: 在 django項目的 settings.py文件中x修改port端口 。

美國誠實簽經驗——IMG全球醫療險,TODO

那么,誠實簽最關鍵的4個要點 是什么呢? 第一,證明你有一定的經濟實力。 可能需要房產、存款等證明,也需要銀行信用卡或借記卡半年流水證明(讓人信服的每月進帳和消費能力)。 這些是為了證明,你可…

大數據開發初學者學習路線

目錄前言導讀:第一章:初識Hadoop第二章:更高效的WordCount第三章:把別處的數據搞到Hadoop上第四章:把Hadoop上的數據搞到別處去第五章:快一點吧,我的SQL第六章:一夫多妻制第七章&…

Python的虛擬環境配置(pyenv+virtualenv)

一、為什么需要配置虛擬環境 Python 2和Python 3之間存在著較大的差異,并且,由于各種原因導致了Python 2和Python 3的長期共存。在實際工作過程中,我們可能會同時用到Python 2和Python 3,因此,也需要經常在Python 2和P…

安卓屏幕適配問題

屏幕適配是根據屏幕密度,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…

Log 日志的使用與重要性

開發過程中出現bug是必不可免的,你會怎樣debug?從第1行代碼開始看么?還是有個文件里面記錄著哪里錯了更方便呢!!!log日志 Python中有個logging模塊可以完成相關信息的記錄,在debug時用它往往事…

webdriver 的三種等待方式

1、顯式等待 一個顯式等待是你定義的一段代碼,用于等待某個條件發生然后再繼續執行后續代碼。 from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWait #…

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…

表單驗證的初步實現和省市級聯

1.表單驗證的初步實現 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html xmlns"http://www.w3.org/1999/xhtml" lang"en"><head><meta http-equiv"Conte…

抓包軟件:Charles

修正&#xff1a;手機不必一定連接電腦分享的熱點&#xff0c;只需要手機和電腦在同一個局域網下就可以了&#xff0c;手機代理IP設置為電腦的IP。 之前寫過一篇通過Wireshark進行抓包&#xff0c;分析網絡連接的文章《通過WireShark抓取iOS聯網數據實例分析》&#xff1a;htt…

Hive的相關介紹

目錄前言&#xff1a;1、Hive簡介2、Hive架構3、Hive與Hadoop的關系4、Hive與傳統數據庫對比5、Hive的數據存儲總結&#xff1a; 目錄 前言&#xff1a; 為什么使用Hive 直接使用hadoop所面臨的問題 人員學習成本太高 項目周期要求太短 MapReduce實現復雜查詢邏輯開發難…

數據結構實驗之排序七:選課名單

數據結構實驗之排序七&#xff1a;選課名單 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 隨著學校規模的擴大&#xff0c;學生人數急劇增加&#xff0c;選課名單的輸出也成為一個繁重的任務&#xff0c;我校目前有在校生3萬多名&#xff0…

Java第五次作業--面向對象高級特性(抽象類和接口)

一、學習要點 認真看書并查閱相關資料&#xff0c;掌握以下內容&#xff1a; 掌握抽象類的設計掌握接口的設計理解簡單工廠設計模式理解抽象類和接口的區別掌握包裝類的應用掌握對象的比較方法和比較器的使用學習使用日期操作類學習匿名內部類的使用二、作業要求 發布一篇隨筆&…

關于國內廠商的國際版殺毒軟件

很多國內軟件公司的殺毒軟件都分為國內版和國際版&#xff0c;這二者有什么區別呢&#xff1f; 首先&#xff0c;這兩個的團隊是不一樣的。國際版的團隊大多收購&#xff0c;國內版為自研。例如百度殺毒的國際版就是原超級巡警的團隊做的&#xff0c;而國內版是自己另起爐灶。…

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

原文&#xff1a;http://www.ydcss.com/archives/41 簡介&#xff1a; 使用gulp-minify-css壓縮css文件&#xff0c;減小文件大小&#xff0c;并給引用url添加版本號避免緩存。重要&#xff1a;gulp-minify-css已經被廢棄&#xff0c;請使用gulp-clean-css&#xff0c;用法一致…

大數據面試題總結(附答案)

文章目錄前言hadoop相關試題Hive相關試題Hbase相關試題Storm相關試題Spark相關試題Java基礎試題其他前言 最近由于要準備面試就開始提早看些面試、筆試題。以下是自己總結的一些經常出現、有價值的試題&#xff0c;包含hadoop、hive、hbase、storm、spark等。答案僅供參考&…

win7 IE11卸載后無法上網

今天某同事需要訪問一個銀行網站&#xff0c;必須使用IE8,我在win7中降級IE11,直接卸載了IE11和其語言包&#xff0c;發現IE8再也打不開網頁了&#xff0c;每次打開都提示保存html網頁。測試Google Chrome上網完全沒有問題。IE8的internet選項等任何工具菜單點擊均無反應&#…