在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么列存儲能夠大幅度提高數(shù)據(jù)的查詢性能

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2023-07-09 16:11 ? 次閱讀

傳統(tǒng)的存儲數(shù)據(jù)的方式是逐行存儲(Row Store),每一個Page存儲多行數(shù)據(jù),而列存儲(Column Store)把數(shù)據(jù)表中的每一列單獨存儲在Page集合中,這意味著,Page集合中存儲的是某一列的數(shù)據(jù),而不是一行的所有列的數(shù)據(jù)。

列存儲索引適合于數(shù)據(jù)倉庫中,主要執(zhí)行大容量數(shù)據(jù)加載和只讀查詢,與傳統(tǒng)面向行的存儲方式相比,使用列存儲索引存儲可最多提高 10 倍查詢性能 ,與使用非壓縮數(shù)據(jù)大小相比,可提供多達 7 倍數(shù)據(jù)壓縮率 。列存儲索引使用用“批處理執(zhí)行模式”的模式,這與行存儲使用的逐行數(shù)據(jù)讀取模式對比,性能大幅提升。

列存儲索引主要在下面三個特性上提升查詢的性能:

  • 行存儲使用逐行處理模式,每次只處理一行數(shù)據(jù);而列存儲索引使用批處理模式,每次處理一批數(shù)據(jù)行。
  • 行存儲是逐行存儲(Row Store),每一個Page存儲多行數(shù)據(jù),而列存儲(Column Store)把數(shù)據(jù)表中的每一列單獨存儲在Page集合中,這意味著,Page集合中存儲的是某一列的數(shù)據(jù),而不是一行中所有列的數(shù)據(jù)。在讀取數(shù)據(jù)時,行存儲把一行的所有列都加載到內(nèi)存,即使有些列根本不會用到;而列存儲只把需要的列加載到內(nèi)存中,不需要的列不會被加載到內(nèi)存中。
  • 列存儲索引自動對數(shù)據(jù)進行壓縮處理,由于同一行的數(shù)據(jù)具有很高的相似性,壓縮率很高,數(shù)據(jù)讀取更快速。

一般情況下,數(shù)據(jù)倉庫的查詢語句只會查詢少數(shù)幾個列的數(shù)據(jù),其他列的數(shù)據(jù)不需要加載到內(nèi)存中,這就使得列存儲特別適合用于數(shù)據(jù)倉庫中。

01、列存儲的特點

為什么列存儲能夠大幅度提高數(shù)據(jù)的查詢性能呢?要回答這個問題,首先必須明白SQL Server引擎是怎樣讀取數(shù)據(jù)的。在讀取數(shù)據(jù)時,SQL Server每次都把所需數(shù)據(jù)所在的整個Page讀取到內(nèi)存中,Page是數(shù)據(jù)讀取的最小單位。如果采用行存儲,每一個Page都存儲所有列的數(shù)據(jù),每行的Size決定了單個Page能夠存儲的數(shù)據(jù)行數(shù)量。

我們可以粗略計算一下,如果一個數(shù)據(jù)行有10列,每列的平均Size是10B,一行的Size是100B,那么單個Page最多存儲80行(8060B/100B);如果采用列存儲模式,那么單個Page可以存儲806行(8060B/10B)。就單個Page存儲的數(shù)據(jù)行數(shù)量而言,列存儲是行存儲的10倍,SQL Server引擎把一個Page讀取到內(nèi)存中,能夠獲取的數(shù)據(jù)行數(shù)量成10倍增加。

因此,采用列存儲模式時,每一個Page能夠存儲更多的數(shù)據(jù)行。在加載列存儲數(shù)據(jù)時,SQL Server只需要消耗少量的IO,就能把某一列的全部數(shù)據(jù)加載到緩存中。當從列很多的大表中讀取幾個列時,相比傳統(tǒng)的行存儲(Row Store)模式,列存儲(Column Store)能夠成千上萬倍地提高數(shù)據(jù)的讀取速度和查詢性能。

02、列存儲的物理實現(xiàn)

數(shù)據(jù)表(堆,B-Tree)以行存儲模式存儲數(shù)據(jù),而列存儲索引以列存儲模式存儲數(shù)據(jù),行存儲和列存儲的示例圖:

a0097d46-1da3-11ee-962d-dac502259ad0.jpg

1,列存儲的優(yōu)點

對于列存儲,列C1…C6 存儲在不同的Page組中,列存儲的優(yōu)點是:

  • 列存儲是把每一列都單獨存儲在Pages集合中,對于行存儲,哪怕只從數(shù)據(jù)表中選擇(select)一列,SQL Server引擎都把整個數(shù)據(jù)行所在的Page讀取到內(nèi)存中,而使用列存儲索引,僅僅需要把select子句指定的列讀取到內(nèi)存,不需要的列不會被讀取;因此,如果一個查詢請求只需要從少量的幾個列中獲得數(shù)據(jù),列存儲能夠大幅度提高查詢性能;
  • 由于單個數(shù)據(jù)列的數(shù)據(jù)冗余度更高,因此同一列的數(shù)據(jù)更容易被壓縮存儲,單個Page存儲更多的數(shù)據(jù);
  • 緩存命中率提高,這是因為同一列的數(shù)據(jù)被高度壓縮,常用的Page被頻繁訪問而變得異常活躍,Buffer Manager把活躍的數(shù)據(jù)頁緩存到內(nèi)存中,不常用的Page被換出(Page Out)。
  • 更高級的查詢執(zhí)行技術(shù),列存儲模式讀取數(shù)據(jù)使用的是批處理模式(Batch Processing Mode),相對于傳統(tǒng)的行處理技術(shù),查詢性能更高。

2,列存儲模式的物理實現(xiàn)

SQL Server引擎分三步實現(xiàn)列存儲:

  • step1,列存儲索引先把數(shù)據(jù)表的所有數(shù)據(jù)行分組,每個分組也稱作行組(Row Groups)。
  • step2,在每個行組中,每列的所有數(shù)據(jù)行構(gòu)成一個列段(Column Segment),簡稱段。
  • step3,對每個段進行壓縮處理和編碼,每個段都單獨存儲在列存儲索引中。

a02b9a70-1da3-11ee-962d-dac502259ad0.png

3,編碼和壓縮

列存儲使用兩種編碼類型:基于字典(dictionary based)和基于值(value based),使用Vertipaq壓縮數(shù)據(jù)。

字典編碼是把唯一值編入字典,每一個唯一值都匹配一個序號,而序號用于索引字典,通過存儲序號來壓縮數(shù)據(jù)。如果數(shù)據(jù)表中存在大量的重復值,那么使用字典編碼壓縮率高。

值編碼用于整數(shù)類型,或小數(shù)類型,編碼的原理是把Value的范圍按照比例縮小或增大,并使用一個指數(shù)(exponent)來表示比例。如果整數(shù)(integer) 或小數(shù)(decimal)的值分布集中,那么使用基于值(value-based)編碼方法進行壓縮非常高效。

列存儲索引的物理存儲如下圖所示:a03e11dc-1da3-11ee-962d-dac502259ad0.png

03、列存儲索引

SQL Server 2012開始引入列存儲模式,用戶通過創(chuàng)建列存儲索引(Column Store Index)來體驗列存儲模式帶來的性能提升。而列存儲模式非常適用于星型連接(Star- Join)類型的聚合查詢,所謂星型連接(Star-Join)的聚合查詢是指對一個大表(Large Table)和多個小表(Little Table)進行連接,并對Large Table 進行聚合查詢。在數(shù)據(jù)庫倉庫中,是指事實表和維度表的連接。

在大表上創(chuàng)建列存儲索引,SQL Server 引擎將充分使用批處理模式(Batch processing mode)來執(zhí)行星型查詢,獲取更高的查詢性能。

典型的Star- Join的聚合查詢類似于下面的示例腳本:

select lt.Grouping_Columns,
        AggregationFunction(bt.Columns)
from dbo.LittleTable lt with(nolock)
inner join dbo.BitTable bt with(nolock)
    on lt.Int_Col1=bt.Int_col1
where ....
group by lt.Grouping_Columns

在SQL Server 2012中,只能創(chuàng)建非聚集的列存儲索引,由于列存儲索引的每一列都有獨立的存儲空間(Page Set),因此,列存儲索引會包含數(shù)據(jù)表的所有列,這樣,每一個數(shù)據(jù)列都會被索引到。但是,并不是每一列都能獲得相同的性能提升,這是因為,列存儲使用的壓縮算法對于具有大量重復值的字符或數(shù)值的數(shù)據(jù),壓縮效率更高。對于列存儲索引而言,查詢性能的提升很大程度上依賴列數(shù)據(jù)的高度壓縮,這會大幅減少存儲該列數(shù)據(jù)所占用的數(shù)據(jù)頁(Data Page),進而大幅減少把數(shù)據(jù)加載到內(nèi)存所耗費的內(nèi)存和時間。

CREATE[NONCLUSTERED]COLUMNSTOREINDEXindex_name
ON schema_name . table_name ( column  [ ,...n ] )
[ WITH ( DROP_EXISTING = { ON | OFF } | MAXDOP = max_degree_of_parallelism ) ]
[ ON  partition_scheme_name ( column_name )  | filegroup_name ]

一旦表上創(chuàng)建了非聚集的列存儲索引,基礎(chǔ)表就變成只讀的(read-only),不能對基礎(chǔ)表做任何更新(insert,update,delete 或merge)操作,如果需要修改數(shù)據(jù),那么,首先要禁用列存儲索引,然后更新數(shù)據(jù),最后重建列存儲索引:

ALTER INDEX mycolumnstoreindex ON mytable DISABLE;
-- update mytable --
ALTER INDEX mycolumnstoreindex on mytable REBUILD

由于創(chuàng)建或重建列存儲索引是IO密集型資源,十分耗費內(nèi)存資源,因此必須在系統(tǒng)空閑的情況下,更新數(shù)據(jù)。

04、列存儲索引的空間使用

列存儲索引首先把數(shù)據(jù)分組,然后每個行組中的每個列構(gòu)成一個段(Segment),每段都是單獨存儲的,列存儲索引占用的存儲空間的大小是由所有段占用的硬盤空間的加和。

系統(tǒng)視圖:sys.column_store_segments 提供每個段的數(shù)據(jù)信息,每個段都是每個行組中的一列的數(shù)據(jù)的集合,例如,如果一個列存儲索引分為10個行組,每個行組有15個數(shù)據(jù)列,那么,該視圖將返回150個段。

select i.object_id
    ,object_name(i.object_id) as object_name
    ,i.name as index_name
    ,i.type_desc as index_type
    ,col_name(i.object_id,ic.column_id) as index_column_name
    ,sum(s.row_count) as row_count
    ,sum(s.on_disk_size)/1024/1024 as on_disk_size_mb
from sys.column_store_segments s
inner join sys.partitions p 
    on s.partition_id=p.partition_id
inner join sys.indexes i 
    on p.object_id=i.object_id
        and p.index_id=i.index_id
inner join sys.index_columns ic 
    on i.object_id=ic.object_id
        and i.index_id=ic.index_id
        and s.column_id=ic.index_column_id
group by i.object_id
    ,i.index_id
    ,i.name
    ,i.type_desc
    ,ic.column_id
order by i.object_id
    ,i.name
    ,index_column_name

可以看出,列存儲索引中每個段占用的硬盤空間是很少的,加載到內(nèi)存所需要耗費的時間,IO次數(shù)和內(nèi)存資源也是很少的,再配上性能更高的批處理模式,所以,列存儲能夠大幅度提高數(shù)據(jù)的查詢性能,特別是對星型聚合的查詢。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 存儲
    +關(guān)注

    關(guān)注

    13

    文章

    4359

    瀏覽量

    86211
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    959

    瀏覽量

    54969
  • 數(shù)據(jù)表
    +關(guān)注

    關(guān)注

    0

    文章

    298

    瀏覽量

    11515

原文標題:為什么列存儲能夠大幅度提高數(shù)據(jù)的查詢性能

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    INA163 4引腳的電壓信號被大幅度衰減是怎么回事?

    中間的是INA163,測試的時候正常上電,給4引腳接入0.1V正弦電壓信號,在9引腳處測試輸出信號,發(fā)現(xiàn)被大幅度衰減,基本沒有信號,但是用5引腳測試時是正常的,所以想請教一下,可能存在的原因是什么?謝謝
    發(fā)表于 08-30 07:37

    反對法大幅度反對

    反對法多福多壽發(fā)的發(fā)大幅度反對法大幅度
    發(fā)表于 09-13 23:18

    的發(fā)生的發(fā)生大幅度發(fā)

    發(fā)發(fā)大幅度發(fā)大廈
    發(fā)表于 11-28 11:22

    請問ADF4351輸出頻率如何能將高次諧波大幅度減小?

    采用ADF4351輸出頻率,發(fā)現(xiàn)設置輸出頻率時,其3、5、7、2、4、6等倍頻的位置幅值很大,特別是基波600M頻率以下時,3倍頻諧波輸出幅度超過了基波,請教如何能將高次諧波大幅度減小?
    發(fā)表于 09-25 11:29

    如何大幅度減少實施時間?

    CPU內(nèi)核。如何大幅度減少實施時間?我有什么選擇可以改變以加快它嗎?以上來自于谷歌翻譯以下為原文The implementation process is a time-consuming
    發(fā)表于 10-17 11:59

    平衡小車保持一段時平衡后突然大幅度來回走動

    能保持靜止,然后過一會兒突然一下就大幅度的來回走動,然后重新啟動后就直接大幅度來回走動了。設定的movement=0;if(Turn_Off(Angle_Balance,Voltage)==1
    發(fā)表于 05-19 21:36

    有什么方法可以大幅度提升發(fā)電機的發(fā)電量呢?

    蒸汽輪機或水輪機的發(fā)電原理是什么?有什么方法可以大幅度提升發(fā)電機的發(fā)電量呢?
    發(fā)表于 06-30 06:49

    光纖接入組網(wǎng)方案讓網(wǎng)速大幅度提高

    光纖接入組網(wǎng)方案讓網(wǎng)速大幅度提高 隨著網(wǎng)吧行業(yè)的發(fā)展,競爭也越來越激烈,要在激烈的競爭中立于不敗之地,設計和組建一個穩(wěn)
    發(fā)表于 04-14 13:51 ?2051次閱讀

    能夠把特定信號大幅度衰減并有衰減極點的低通濾波器

    能夠把特定信號大幅度衰減并有衰減極點的低通濾波器 電路的功能
    發(fā)表于 05-13 15:34 ?2140次閱讀
    <b class='flag-5'>能夠</b>把特定信號<b class='flag-5'>大幅度</b>衰減并有衰減極點的低通濾波器

    Altera的FPGA OpenCL計劃大幅度縮短了早期試用客戶的開發(fā)時間

      2012年4月11號,北京——Altera公司(Nasdaq: ALTR)今天宣布,goHDR作為FPGA OpenCL計劃的早期試用客戶,通過Altera的FPGA OpenCL計劃,大幅度縮短了開發(fā)時間,顯著提高性能
    發(fā)表于 04-12 08:58 ?814次閱讀

    谷歌和阿爾法狗為大幅度提高創(chuàng)新能力而采用的5個原則

    接下來,本文將介紹谷歌和阿爾法狗為大幅度提高創(chuàng)新能力而采用的5個原則。在這個VUCA(volatile, uncertain, complex, ambiguous的首字母縮寫,即易變、不確定、復雜、模糊)時代,所有公司都可以用這些原則展開競爭。
    的頭像 發(fā)表于 09-29 10:14 ?6132次閱讀

    特斯拉大幅度降價 為何

    特斯拉大幅度降價 為何
    發(fā)表于 03-04 14:48 ?878次閱讀

    桁架機器人大幅度提高企業(yè)效率的幾大要點

    山東康道智能資訊:桁架機器人大幅度提高企業(yè)效率的幾大要點,能替代人工作業(yè)外,還能提升產(chǎn)品質(zhì)量。一、桁架機器人大幅度提高企業(yè)效率的幾大要點1、桁架機器人移送產(chǎn)品的時間是固定的,不用休息,
    發(fā)表于 01-07 17:29 ?348次閱讀

    小米正在大幅度增加明年的工廠訂單?

    據(jù)報道,華為最大的中國智能手機競爭者正在大幅度增加明年的工廠訂單,以實現(xiàn)大膽增長,并可能在激烈的消費者市場中對蘋果構(gòu)成威脅。
    的頭像 發(fā)表于 12-02 15:58 ?1789次閱讀

    存儲索引的空間使用

    (Column Store)把數(shù)據(jù)表中的每一單獨存儲在Page集合中,這意味著,Page集合中存儲的是某一
    的頭像 發(fā)表于 06-25 17:30 ?703次閱讀
    <b class='flag-5'>列</b><b class='flag-5'>存儲</b>索引的空間使用
    主站蜘蛛池模板: 777欧美午夜精品影院 | 欧美日韩精品乱国产 | 国产一级免费视频 | 中文字幕亚洲一区二区三区 | 2021久久精品国产99国产 | 69ww免费视频播放器 | 日韩在线毛片 | 娇妻被黑人蹂躏 | 久久精品国产清自在天天线 | 嘿嘿嘿视频在线观看网站 | 人人入人人爱 | 亚洲一区免费看 | 色拍视频 | 国产美女特级嫩嫩嫩bbb | 免费看黄色网页 | 成 黄 色 激 情视频网站 | 四虎影院永久在线观看 | 天天操天天看 | 亚洲a毛片 | 国产精品视频久久久久久 | 免费国产h视频在线观看 | 午夜国产精品视频 | 亚洲亚洲人成网站在线观看 | 乱h亲女小说 | 久久成人国产精品青青 | 秋霞麻豆 | 欧美在线性 | 亚洲乱强| 深夜一级毛片 | 94久久国产乱子伦精品免费 | 欧美在线资源 | 碰免费人人人视频 | 欧美激情综合 | www.91大神| 日韩黄a级成人毛片 | 四虎东方va私人影库在线观看 | 日韩有色 | 欧美高h | 免费被黄网站在观看 | 精品国产污网站在线观看15 | 在线观看的黄网 |