Non-Clustered Column Store Index in SQL Server 2012 by Srikanth Manda

16
41068
row store

Hi Friends,

I would like to add a pretty good article on “Non-Clustered Column Store Index in SQL Server 2012” from my friend “Srikanth Manda”. Hope you will enjoy this.

Everyone agree the fact that hardware speed and capacity has increased past two or three decades, but disk I/O (Input/Output) or disk access or data transfer rate has not grown up to the expected level and is still the slow. One key point to remember, as time is moving forward the size of the database become larger and larger. Data present now would increase by almost 10 times in next 2 to 3 years from no. We have provide a technology in SQL Server which can be addressed this kind of data growth with Data Warehouses. Secondly, the size becomes bigger the query performance is also very critical. Customers would like to have a response like a inter active, they want to have large amount of data, they want to process the data and get the results in the query like attractive fashion. Thirdly, that we are seeing is Data Warehouse has become more like a commodity and provide Data Warehouse technology to masses. Finally, the amount of data in data warehouse (DWH) is growing tremendously day by day. When you want to retrieve (Query) data from Data Warehouse, it takes quite huge amount of time. This would degrade the performance of the Data Warehouse. All these issues can be addressed by Non-Clustered Column Store Index.
In the Article, We will learn about this new feature, how can we build this, how it is in SQL Server, how exactly the data is stored, what happens underneath the engine, how this improves performance of Data Warehousing Queries.
In any traditional relational DBMS, the data is stored as rows (B-Tree format). Like, Microsoft SQL Server stores rows in a page of size of 8 K. If you have a row of 10 columns, you store Row 1 , Row 2 and when page becomes full the page 8 K, then Row goes to second page and so on. This is how the data is stored, successfully formats and successfully for OLTP Workloads. For example consider the image below the data for ten columns for each row gets stored together contiguously on the same page and once the data is full and the row goes to second page.

What has changed is, instead of storing data in the row format other way to look out is can I store data in the Column Store format. For example, I have a table with C1 to C10 columns, instead of storing as rows will store as columns. Then we have storage as Column C1, C2… C10. When we store data in the column store format, we get very good compression. The reason is data from same column is of same type and domain, so it compresses very well. For example, A company is operating globally throughout the world. All the employees from India, there mention the Country as India. Similar, employee from US would mention as ‘US’ as Country. Here, Column with Country would be compressed because it is a repetitive pattern. This kind of opportunity is available in Column Store Format rather than Row Store Format.
In the Row Store Format, data stored for all ten columns C1, C2, C3, …., C10. If we want to retrieve only columns like C1,C3,C5. What happens in the Row Store Format is we need read/fetch data for the entire row of 10 columns then predicate is applied for the specified columns. But, in case of Column Store Format, we can fetch only the required columns i.e.; Columns C1,C2,C3 etc. In this case, it reduces I/O and data fits in memory with which you get much improved performance. You can improve how the query is processed using Column Store technology that gives much better response time.
If we create Non-Clustered Column Store Index, the data is stored in column format.

If we store data in column format, suppose we store 10 million rows, we cannot store all 10 million rows of column C1 as storage unit. What we do is we break those rows into smaller chunks, which we call have as row group.

We have grouped the rows of 1 million; call it as Row Group Chunk. In each Row Group which has 10 columns here and each column is stored in its segment. It would be 10 segments. The benefit of storing each column in segment, when I want to rows of columns C1, C2, then I just get segment for column C1, segment for column C2.

Note: Blue color box are nothing but segments.
Important Points to remember:
1) Row group
• set of rows (typically 1 million)
2) Column Segment
• Contains values from one column from row group
3) Segments are individually compressed
4) Each segment stored separately as LOB’s as Binary Format
5) Segment is unit of transfer between disk and memory

New Batch Processing Mode
1) Some of the more expensive operators(Hash Match for joins and aggregations) utilize a new execution mode called Batch Mode
2) Batch mode takes advantage of advanced hardware architectures, processor cache and RAM improves parallelism
3) Packets of about 1000 rows are passed between operators, with column data represented as a vector
4) Reduces CPU usage by factor of 10(sometimes up to a factor of 40)
5) Much faster than row-mode processing
6) Other execution plan operators that use batch processing mode are bitmap filter, filter, compute scalar
7) Include all columns in a ColumnStore Index

Batch Mode restrictions:
1) Queries using OUTER Join directly against ColumnStore data, NOT IN (Sub query), UNION ALL won’t leverage batch mode, will revert to row processing mode
Examples:
1) In this Demo, Creating two tables i.e.; one with regular index and other with Non-Clustered ColumnStore Index. Below is the scrip to create two tables
Table with Regular Index
CREATE TABLE [dbo].[FactInternetSalesWithRegularIndex](
[DummyIdentity] [int] IDENTITY(1,1) NOT NULL,
[ProductKey] [int] NOT NULL,
[OrderDateKey] [int] NOT NULL,
[OrderQuantity] [smallint] NULL,
[SalesAmount] [money] NULL
CONSTRAINT [PK_FactInternetSalesWithRegularIndex_ProductKey_OrderDateKey]
PRIMARY KEY CLUSTERED
(
[DummyIdentity] ASC,
[ProductKey] ASC
)) ON [PRIMARY]

Table with Non-Clustered ColumnStore Index

CREATE TABLE [dbo].[FactInternetSalesWithColumnStoreIDX](
[DummyIdentity] [int] IDENTITY(1,1) NOT NULL,
[ProductKey] [int] NOT NULL,
[OrderDateKey] [int] NOT NULL,
[OrderQuantity] [smallint] NULL,
[SalesAmount] [money] NULL
CONSTRAINT [PK_FactInternetSalesWithColumnStoreIDX_ProductKey_OrderDateKey]
PRIMARY KEY CLUSTERED
(
[DummyIdentity] ASC,
[ProductKey] ASC
)) ON [PRIMARY]

GO

2) Insert data into both tables. Here is the insert script
Insert Script for FactInternetSalesWithRegularIndex Table
INSERT INTO FactInternetSalesWithRegularIndex
(
ProductKey, OrderDateKey,
OrderQuantity,SalesAmount
)
SELECT
ProductKey,OrderDateKey,
OrderQuantity,SalesAmount
FROM [AdventureWorksDW2012].dbo.[FactInternetSales]

GO 50

Insert Script for FactInternetSalesWithColumnStoreIDX Table
INSERT INTO FactInternetSalesWithColumnStoreIDX
(
ProductKey, OrderDateKey,
OrderQuantity,SalesAmount
)
SELECT
ProductKey,OrderDateKey,
OrderQuantity,SalesAmount
FROM [AdventureWorksDW2012].dbo.[FactInternetSales]

GO 50

3) And finally I want to create a regular non-cluster index (on ProductKey and Salesamount columns) on the first table, and column store index on the second table, which will include ProductKey and Salesamount columns.

CREATE NONCLUSTERED INDEX [NC_FactInternetSalesWithRegularIndex_ProductKey_Salesamount]
ON FactInternetSalesWithRegularIndex
(ProductKey,Salesamount)
GO

CREATE NONCLUSTERED COLUMNSTORE INDEX [CS_FactInternetSalesWithColumnStoreIDX_ProductKey_Salesamount]
ON FactInternetSalesWithColumnStoreIDX
(ProductKey,Salesamount)

GO

4) Execution of Queries

When I ran the query with STATISTICS IO ON, I found stunning results (with significant performance) of using column store index vs regular index, as you can see below:

SET STATISTICS IO ON

Select ProductKey,sum(Salesamount)
from FactInternetSalesWithRegularIndex
GROUP BY ProductKey
ORDER BY ProductKey

Select ProductKey,sum(Salesamount)
from FactInternetSalesWithColumnStoreIDX
GROUP BY ProductKey
ORDER BY ProductKey

SET STATISTICS IO OFF

Result:

(158 row(s) affected)
Table ‘FactInternetSalesWithRegularIndex’. Scan count 5, logical reads 4339, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

SQL Server Execution Times:
CPU time = 1342 ms, elapsed time = 504 ms.

(158 row(s) affected)
Table ‘FactInternetSalesWithColumnStoreIDX’. Scan count 4, logical reads 34, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table ‘Worktable’. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

SQL Server Execution Times:
CPU time = 47 ms, elapsed time = 27 ms.

Even the time required to run these two queries greatly varied, the queries with regular index took 1342 ms for CPU cycle and 504 ms as elapsed time vs just 47 ms for CPU cycle and 27 ms as elapsed time for the second query, which uses column store index

The relative cost of the second query (which uses column store index) is just 11% as opposed to the relative cost of first query (which uses regular index) which is 89%.

For column store index exclusively, SQL Server 2012 introduces a new execution mode called Batch Mode, which processes batches of rows (as opposed to the row by row processing in case of regular index) that is optimized for multicore CPUs and increased memory throughput of modern hardware architecture. It also introduced a new operator for column store index processing as shown below:

Restrictions:
1) Cannot be clustered
2) Cannot act as PK or FK
3) Does not include sparse columns
4) Can’t be used with tables that are part of Change Data Capture or FileStream data
5) Cannot be used with certain data types, such as binary, text/image, row version /timestamp, CLR data types (hierarchyID/spatial), nor with data types Created with Max keyword eg: varchar(max)
6) Cannot be modified with an Alter – must be dropped and recreated
7) Can’t participate in replication
8) It’s a read-only index
a. Cannot insert rows and expect column store index be maintained

What’s New in SQL Server 2014
Columnstore index has been designed to substantially increase performance of data warehouse queries, which require aggregation and filtering of large amounts of data or joining multiple tables (primarily performs bulk loads and read-only queries).
There were several limitations in SQL Server 2012, SQL Server 2014 overcomes them:
1) We can create only one non-clustered column store index which can include all or few columns of table in a single index on a table.
2) SQL Server 2014 has come up with an enhancement of creating Clustered Column Store Index.
3) SQL Server 2012, when we create a Non Clustered Column Store index then it makes table read only.
4) With SQL Server 2014, you can create a Clustered Column Store Index without any impact on the insertion on table. You can issue some INSERT, UPDATE, DELETE statements with a table with clustered column store index. No more workaround is required for writing data to a table with Non Clustered Column Store Index like drop the existing one and re-create the index.

Hope you enjoyed the post ..
Thanks,
Srikanth Manda

16 COMMENTS

  1. In our blog, we bring you the freshest updates and thrilling news about the most popular UK stars from the worlds of broadcasting, reality TV, and popular culture. Whether you’re a fan of hit reality shows like Love Island, The Only Way Is Essex, or Made in Chelsea, or you’re interested to keep up with the lives of the UK’s top social media personalities, our platform covers it all. From juicy behind-the-scenes drama to exclusive chats, we ensure you’re in the know with everything happening in the world of your beloved celebrities – https://eventnewslondon.com/ .

    UK reality TV celebrities have gained huge fame over the years, transforming from everyday individuals into household names with massive audiences. Our blog investigates their personal and professional lives, offering perspectives into their latest endeavors, friendships, and issues. Whether it’s a new romance brewing on Love Island or a cast member from Geordie Shore starting a new business, you’ll find comprehensive stories that highlight the glamorous yet sometimes chaotic lives of these celebrities.

  2. “What ya lifting now?” His dad asks as he fidgets on the commode seat. He can feel his hard-on growing in his pants. That night, I did a whole spa routine to make sure my skin was soft and my ass was stretched and wet. I was wearing nothing but a jockstrap as I was told. Waiting by the door on fourth. My heartbeat was so fast as my mouth was dry. I heard the footstep approaching. I left the door unlocked as one of the instructions I was received from daddy. He stepped in with his size 10 Christian Loublitine loafer where my eyes were going up from there. When I made eye contact with daddy, daddy slapped me across the face and said, “Bad boy, Where the fuck are your sneakers as I told you to wear tonight.” I was trembling and said in a very low voice, “ sorry daddy I fooooorgot.”

  3. เกมบาคาร่า
    เล่นบาคาร่าแบบรวดเร็วทันใจกับสปีดบาคาร่า
    ถ้าคุณเป็นแฟนตัวยงของเกมไพ่บาคาร่า คุณอาจจะเคยชินกับการรอคอยในแต่ละรอบการเดิมพัน และรอจนดีลเลอร์แจกไพ่ในแต่ละตา แต่คุณรู้หรือไม่ว่า ตอนนี้คุณไม่ต้องรออีกต่อไปแล้ว เพราะ SA Gaming ได้พัฒนาเกมบาคาร่าโหมดใหม่ขึ้นมา เพื่อให้ประสบการณ์การเล่นของคุณน่าตื่นเต้นยิ่งขึ้น!

    ที่ SA Gaming คุณสามารถเลือกเล่นไพ่บาคาร่าในโหมดที่เรียกว่า สปีดบาคาร่า (Speed Baccarat) โหมดนี้มีคุณสมบัติพิเศษและข้อดีที่น่าสนใจมากมาย:

    ระยะเวลาการเดิมพันสั้นลง — คุณไม่จำเป็นต้องรอนานอีกต่อไป ในโหมดสปีดบาคาร่า คุณจะมีเวลาเพียง 12 วินาทีในการวางเดิมพัน ทำให้เกมแต่ละรอบจบได้รวดเร็ว โดยเกมในแต่ละรอบจะใช้เวลาเพียง 20 วินาทีเท่านั้น

    ผลตอบแทนต่อผู้เล่นสูง (RTP) — เกมสปีดบาคาร่าให้ผลตอบแทนต่อผู้เล่นสูงถึง 4% ซึ่งเป็นมาตรฐานความเป็นธรรมที่ผู้เล่นสามารถไว้วางใจได้

    การเล่นเกมที่รวดเร็วและน่าตื่นเต้น — ระยะเวลาที่สั้นลงทำให้เกมแต่ละรอบดำเนินไปอย่างรวดเร็ว ทันใจ เพิ่มความสนุกและความตื่นเต้นในการเล่น ทำให้ประสบการณ์การเล่นของคุณยิ่งสนุกมากขึ้น

    กลไกและรูปแบบการเล่นยังคงเหมือนเดิม — แม้ว่าระยะเวลาจะสั้นลง แต่กลไกและกฎของการเล่น ยังคงเหมือนกับบาคาร่าสดปกติทุกประการ เพียงแค่ปรับเวลาให้เล่นได้รวดเร็วและสะดวกขึ้นเท่านั้น

    นอกจากสปีดบาคาร่าแล้ว ที่ SA Gaming ยังมีโหมด No Commission Baccarat หรือบาคาร่าแบบไม่เสียค่าคอมมิชชั่น ซึ่งจะช่วยให้คุณสามารถเพลิดเพลินไปกับการเล่นได้โดยไม่ต้องกังวลเรื่องค่าคอมมิชชั่นเพิ่มเติม

    เล่นบาคาร่ากับ SA Gaming คุณจะได้รับประสบการณ์การเล่นที่สนุก ทันสมัย และตรงใจมากที่สุด!

  4. USDT check transaction
    Stablecoin TRC20 Transaction Validation and Anti-Money Laundering (AML) Procedures
    As crypto coins like Tether TRON-based increase in adoption for quick and affordable transactions, the demand for protection and adherence with financial crime prevention regulations expands. Here’s how to verify Tether TRON-based payments and ensure they’re not related to illicit actions.

    What is TRON-based USDT?
    TRON-based USDT is a stablecoin on the TRX ledger, pegged in accordance with the American dollar. Famous for its cheap transfers and velocity, it is frequently employed for international transfers. Checking transactions is essential to block connections to money laundering or other criminal operations.

    Verifying USDT TRC20 Transactions
    TRX Explorer — This blockchain viewer permits users to follow and verify Tether TRC20 transactions using a public address or transfer code.
    Supervising — Advanced players can track unusual patterns such as large or rapid transfers to spot suspicious actions.

    AML and Illicit Funds
    AML (AML) standards support block illegal transactions in crypto markets. Services like Chainalysis and Elliptic enable companies and trading platforms to identify and prevent illicit funds, which means money tied to illegal activities.

    Tools for Compliance
    TRONSCAN — To validate TRON-based USDT transfer data.
    Chain Analysis and Elliptic Solutions — Used by exchanges to ensure AML conformance and monitor illicit activities.

    Conclusion
    Guaranteeing secure and legitimate USDT TRC20 payments is critical. Services like TRONSCAN and AML tools help guard traders from interacting with dirty cryptocurrency, encouraging a protected and lawful digital market.

  5. ทดสอบเล่นสล็อต พีจี: สัมผัสประสบการณ์เกมสล็อตออนไลน์แบบใหม่

    ก่อนเริ่มเล่นสล๊อตออนไลน์ สิ่งสำคัญคือการทำความรู้จักกับการทดลองเล่นเสียล่วงหน้า เกม ทดลองเล่นสล๊อตนั้นถูกสร้างสรรค์จากจากเครื่องสล็อตแบบต้นตำรับ โดยเจาะจงมากๆ สล็อตสามทองคำ ซึ่งเคยเป็นที่นิยมอย่างมากในบ่อนการพนันต่างประเทศ ในเกม ทดลองเล่นสล๊อต พีจี ผู้เล่นจะได้เข้าถึงโครงสร้างของเกมการเล่นที่มีความง่ายดายและแบบดั้งเดิม มาพร้อมกับรีล (วงล้อ) ที่มีห้าแถวและเพย์ไลน์ (Payline) หรือรูปแบบการชนะที่มากถึง 15 แบบการจ่ายรางวัล ทำให้มีความน่าจะเป็นชนะได้มากมายมากยิ่งกว่าเดิม

    สัญลักษณ์ต่าง ๆ ในเกมสล็อตนี้เพิ่มความรู้สึกถึงอารมณ์ร่วมของสล็อตแบบดั้งเดิม โดยมีไอคอนที่คุ้นเคยเช่น เชอร์รี่ เลขเจ็ด 7 และเพชร ซึ่งนอกจากจะทำให้ตัวเกมมีความน่าสนใจแล้วยังเพิ่มโอกาสในการได้รับผลตอบแทนเพิ่มเติม

    ความง่ายดายของสล็อต PG
    ทดลองเล่นสล็อต PG ในตัวเกมไม่ใช่แค่มีรูปแบบการเล่นที่เล่นง่าย แต่ยังมีความง่ายดายอย่างยิ่ง ไม่ว่าคุณจะใช้เครื่องคอมพิวเตอร์หรือโทรศัพท์มือถือรุ่นไหน แค่เชื่อมต่ออินเทอร์เน็ต คุณก็จะสามารถร่วมสนุกเล่นได้ทันที ลองเล่น พีจี ยังถูกทำมาให้รองรับเครื่องใช้หลากหลายลักษณะ เพื่อเสนอบริการการเล่นที่ไม่สะดุดไม่สะดุดแก่ลูกค้าทุกท่าน

    การเลือกแบบเกมและการเล่นในเกม
    และคุณสมบัติที่น่าสนใจ เกมทดลองเล่น พีจี ยังมีหลากหลายธีมให้สนุกกับ โดยไม่จำกัดธีมที่น่าสนใจ น่าชื่นชอบ หรือธีมที่มีความเหมือนจริง ทำให้ผู้เล่นอาจสนุกสนานไปกับแนวทางใหม่ ๆตามรสนิยม

    จากฟีเจอร์หลากหลายนี้ ทดลองเล่นสล็อต PG ได้เป็นที่ชื่นชอบตัวเลือกที่นิยมในกลุ่มนักเล่นเกมสมัยใหม่ที่กำลังแสวงหาความท้าทายใหม่ ๆและการชนะที่เป็นไปได้มากขึ้น หากคุณกำลังแสวงหาความแปลกใหม่ การทดลองเล่นเกมสล็อตเป็นทางเลือกที่คุณไม่ควรมองข้าม!

  6. Judul: Merasakan Pengalaman Memainkan dengan “PG Slot” di Situs Casino ImgToon.com

    Dalam dunia permainan kasino online, permainan slot telah jadi salah satu permainan yang paling diminati, terutama jenis PG Slot. Di antara berbagai situs kasino online, ImgToon.com adalah tujuan utama bagi pemain yang ingin menguji nasib mereka di banyak permainan slot, termasuk beberapa kategori terfavorit seperti demo pg slot, pg slot gacor, dan RTP slot.

    Demo PG Slot: Menjalani Bebas dari Risiko
    Salah satu fitur menarik yang ditawarkan oleh ImgToon.com adalah demo pg slot. Fungsi ini mengizinkan pemain untuk mencoba berbagai jenis slot dari PG tanpa harus bertaruh taruhan sebenarnya. Dalam mode demo ini, Anda dapat memeriksa berbagai cara dan mengerti sistem permainan tanpa bahaya kehilangan uang. Ini adalah langkah terbaik bagi pemula untuk terbiasa dengan permainan slot sebelum mengalihkan ke mode taruhan sebenarnya.

    Mode demo ini juga memberikan Anda pemahaman tentang potensi kemenangan dan hadiah yang mungkin bisa Anda peroleh saat bermain dengan uang nyata. Pemain dapat mencari permainan tanpa ragu, membuat pengalaman bermain di PG Slot semakin menyenangkan dan bebas tekanan.

    PG Slot Gacor: Kesempatan Besar Mendulang Kemenangan
    PG Slot Gacor adalah sebutan terkemuka di kalangan pemain slot yang merujuk pada slot yang sedang dalam fase memberikan kemenangan tinggi atau lebih sering dikenal “gacor”. Di ImgToon.com, Anda dapat mencari berbagai slot yang masuk dalam kategori gacor ini. Slot ini terkenal memiliki peluang kemenangan lebih tinggi dan sering memberikan bonus besar, membuatnya pilihan utama bagi para pemain yang ingin memperoleh keuntungan maksimal.

    Namun, harus diingat bahwa “gacor” atau tidaknya sebuah slot dapat bergeser, karena permainan slot bergantung generator nomor acak (RNG). Dengan memainkan secara rutin di ImgToon.com, Anda bisa menemukan pola atau waktu yang tepat untuk memainkan PG Slot Gacor dan meningkatkan peluang Anda untuk menang.

    RTP Slot: Faktor Esensial dalam Pencarian Slot
    Ketika membicarakan tentang slot, istilah RTP (Return to Player) adalah faktor yang sangat penting untuk dipertimbangkan. RTP Slot berkaitan pada persentase dari total taruhan yang akan dikirimkan kepada pemain dalam jangka panjang. Di ImgToon.com, setiap permainan PG Slot diberi dengan informasi RTP yang terang. Semakin tinggi persentase RTP, semakin besar peluang pemain untuk mendapatkan kembali sebagian besar dari taruhan mereka.

    Dengan memilih PG Slot yang memiliki RTP tinggi, pemain dapat mengelola pengeluaran mereka dan memiliki peluang yang lebih baik untuk menang dalam jangka panjang. Ini menjadikan RTP sebagai indikator utama bagi pemain yang mencari keuntungan dalam permainan kasino online.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

− two = four