{"id":505,"date":"2012-02-25T05:39:00","date_gmt":"2012-02-25T05:39:00","guid":{"rendered":"\/blogs\/joe\/post\/Exploring-Columnstore-Index-Metadata-Segment-Distribution-and-Elimination-Behaviors.aspx"},"modified":"2013-01-02T20:32:26","modified_gmt":"2013-01-03T04:32:26","slug":"exploring-columnstore-index-metadata-segment-distribution-and-elimination-behaviors","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/joe\/exploring-columnstore-index-metadata-segment-distribution-and-elimination-behaviors\/","title":{"rendered":"Exploring Columnstore Index Metadata, Segment Distribution and Elimination Behaviors"},"content":{"rendered":"<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">I was interested in exploring various questions about columnstore indexing this morning &ndash; and I realized I should probably blog about what I observed.<span>&nbsp; <\/span>This truly was just an exploration and not a formal test (call it semi-structured fiddling).<span>&nbsp; <\/span>Also, some of my &ldquo;questions&rdquo; were really just confirmations.<span>&nbsp; <\/span>While I believe what I read, I like to see things firsthand whenever possible.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Today I thought I would take a few minutes to explore columnstore index behavior on a 123,695,104 row fact table.<span>&nbsp; <\/span>My previous tests had been limited to &lt; 10 million rows, which doesn&rsquo;t really showcase columnstore index capabilities. <span>&nbsp;<\/span>So I thought I would experiment with higher numbers &ndash; although I still want to start the billion row testing scenarios at some point.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">The experimentations took place on a SQL Server instance capped at 8GB of RAM max server memory and 8 logical processors.<span>&nbsp; <\/span>I used the FactInternetSales table from AdventureWorksDWDenali &ndash; increasing it to 123,695,104 rows.<\/font><span><font style=\"font-size: 11pt\">&nbsp; <\/font><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">I covered the entire fact table for my initial exploration (although as you&rsquo;ll see, I made a few changes both to this index and also moving from a heap table to a clustered index):<\/font><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">CREATE<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#0000ff\">NONCLUSTERED<\/font><\/span> <span><font color=\"#0000ff\">COLUMNSTORE<\/font><\/span> <span><font color=\"#0000ff\">INDEX<\/font><\/span> <span><font color=\"#008080\">[NonClusteredColumnStoreIndex-20120225-092018]<\/font><\/span> <span><font color=\"#0000ff\">ON<\/font><\/span> <span><font color=\"#008080\">[dbo]<\/font><\/span><span><font color=\"#808080\">.<\/font><\/span><\/font><span><font color=\"#008080\" style=\"font-size: 9.5pt\">[FactInternetSales]<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><font color=\"#808080\" style=\"font-size: 9.5pt\">(<\/font><\/font><\/span><span><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[ProductKey]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[OrderDateKey]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[DueDateKey]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[ShipDateKey]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[CustomerKey]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[PromotionKey]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[CurrencyKey]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[SalesTerritoryKey]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[SalesOrderNumber]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[SalesOrderLineNumber]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[RevisionNumber]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[OrderQuantity]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[UnitPrice]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[ExtendedAmount]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[UnitPriceDiscountPct]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[DiscountAmount]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[ProductStandardCost]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[TotalProductCost]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[SalesAmount]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[TaxAmt]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[Freight]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[CarrierTrackingNumber]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[CustomerPONumber]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[OrderDate]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[DueDate]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><span><font color=\"#008080\" style=\"font-size: 9.5pt\">[ShipDate]<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#808080\"><font style=\"font-size: 9.5pt\">) <\/font><\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#0000ff\">WITH <\/font><\/span><span><font color=\"#808080\">(<\/font><\/span><span><font color=\"#0000ff\">DROP_EXISTING<\/font><\/span><\/font><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#808080\">=<\/font><\/span> <span><font color=\"#0000ff\">OFF<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">)<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><font style=\"font-size: 9.5pt\"><\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><font color=\"#0000ff\" style=\"font-size: 9.5pt\">GO<\/font><\/font><\/span><span><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Remember that we can have up to 1,024 columns and that the concept of key columns and INCLUDE don&rsquo;t apply here.<span>&nbsp; <\/span>Nor does the ASC or DESC keywords or creation of the columnstore index as clustered (only nonclustered is supported at this point).<\/font><span><font style=\"font-size: 11pt\">&nbsp; <\/font><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Regarding the data types, we can cover the standard &ldquo;business&rdquo; ones &ndash; but not the &ldquo;max&rdquo;, LOB and xml flavors.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">&lt;quick aside&gt; By the way &ndash; a shout out to <\/font><font style=\"font-size: 11pt\"><a href=\"http:\/\/social.technet.microsoft.com\/wiki\/contents\/articles\/3540.sql-server-columnstore-index-faq-en-us.aspx\" target=\"_blank\" class=\"broken_link\">Eric Hanson&rsquo;s Columnstore Index<\/a><font color=\"#0000ff\"><\/font> references on the TechNet Wiki.<span>&nbsp; <\/span>These have been invaluable in understanding columnstore indexing and also revealing tools to help fish for your own answers.<span>&nbsp; <\/span>I love seeing this kind of high quality content coming directly from the Program Managers. <span>&nbsp;<\/span>I really hope that more PMs start updating their associated feature areas on TechNet Wiki in the future.<span>&nbsp; <\/span>When I first heard about TechNet Wiki I was more than a little dubious.<span>&nbsp; <\/span>We already have blogs, forums, BOL, papers, videos, etc.<span>&nbsp; <\/span>Why do we need <em>another<\/em> information channel?<span>&nbsp; <\/span>Seeing Eric&rsquo;s content has totally shifted my opinion on this.<span>&nbsp; <\/span>The information is timely, fresh (you see it get updated frequently) and easily discoverable.<span>&nbsp; <\/span>It also allows for community participation and questions &ndash; which, if managed well &ndash; only helps the associated quality of the content.<span>&nbsp;&nbsp; <\/span>I don&rsquo;t believe TechNet Wiki replaces BOL or other information channels, but I feel it has definitely earned a seat at the table. <span>&nbsp;<\/span>Again, I hope other PMs follow this lead &ndash; or alternatively use their blogs to heavily describe their feature areas (much like the great blog post series on the <a href=\"http:\/\/blogs.msdn.com\/b\/sqlserverstorageengine\/archive\/2012\/01\/22\/alwayson-comapring-readble-secondary-with-the-similar-functionality-available-in-db2.aspx\" target=\"_blank\" class=\"broken_link\">AlwaysOn Readable Secondary feature from Sunil Agarwal<\/a><font color=\"#0000ff\"><\/font><\/font><font style=\"font-size: 11pt\">). <span>&nbsp; <\/span>Just doing periodic updates on their pet features can help do wonders for feature adoption and comprehension. &lt;\/quick aside&gt;<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Back on task&hellip; The following are the various questions I asked and the various observations made&hellip;.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<strong><font face=\"Calibri\"><font style=\"font-size: 11pt\">Was tempdb used in creating the columnstore index on a heap table?<\/font><\/font><\/strong>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">I intentionally had tempdb configured to an initial small size with auto-growth enabled in order to see if it was used at all during the CREATE COLUMNSTORE INDEX against the 123 million row table (I could have looked through counters and other ways too &ndash; this was just a side effect observation). The answer? It was not used (staying at a very small value of 10 MBs). <\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<strong><font face=\"Calibri\"><font style=\"font-size: 11pt\">How do things look in sys.indexes and sys.index_columns?<\/font><\/font><\/strong>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Nothing terribly interesting &#8211; except that the is_included_column is a value of &ldquo;1&rdquo;:<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<span><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/3c7885f9\/clip_image002.png\"><img fetchpriority=\"high\" decoding=\"async\" style=\"background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px\" src=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/0289430d\/clip_image002_thumb.png\" border=\"0\" alt=\"clip_image002\" title=\"clip_image002\" width=\"780\" height=\"127\" \/><\/a><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<strong><font face=\"Calibri\"><font style=\"font-size: 11pt\">Anything interesting in sys.column_store_dictionaries?<\/font><\/font><\/strong>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Most definitely&hellip; This was a pretty illuminating catalog to query.<span>&nbsp; <\/span>A few of the observations:<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; text-indent: -0.25in; margin: 0in 0in 0pt 38.4pt\" class=\"MsoListParagraphCxSpFirst\">\n<span><span><font face=\"Symbol\"><font style=\"font-size: 11pt\">&middot;<\/font><\/font><span style=\"line-height: normal\"><font face=\"Times New Roman\"><font style=\"font-size: 7pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/font><\/span><\/span><\/span><font face=\"Calibri\"><font style=\"font-size: 11pt\">There were 149 rows across the 26 columns defined in the index.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; text-indent: -0.25in; margin: 0in 0in 0pt 38.4pt\" class=\"MsoListParagraphCxSpMiddle\">\n<span><span><font face=\"Symbol\"><font style=\"font-size: 11pt\">&middot;<\/font><\/font><span style=\"line-height: normal\"><font face=\"Times New Roman\"><font style=\"font-size: 7pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/font><\/span><\/span><\/span><font face=\"Calibri\"><font style=\"font-size: 11pt\">25 columns had one row &ndash; and 1 column had 125 rows.<span>&nbsp; <\/span>Not surprisingly &ndash; the SalesOrderNumber was the column with 125 entries.<span>&nbsp; <\/span>This is also the column I populated with a random GUID that I converted to nvarchar(20) for new entries to the table.<span>&nbsp; <\/span>The values for this column, while not constrained, were nearly unique in my test (with the exception of the base data). <\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; text-indent: -0.25in; margin: 0in 0in 0pt 38.4pt\" class=\"MsoListParagraphCxSpMiddle\">\n<span><span><font face=\"Symbol\"><font style=\"font-size: 11pt\">&middot;<\/font><\/font><span style=\"line-height: normal\"><font face=\"Times New Roman\"><font style=\"font-size: 7pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/font><\/span><\/span><\/span><font face=\"Calibri\"><font style=\"font-size: 11pt\">The on disk (dictionary) storage for SalesOrderNumber was by far the worst (not surprisingly).<span>&nbsp; <\/span>It was 2,328,411,337 in bytes.<span>&nbsp; <\/span>Compare that with 21,384 bytes for an integer column, 74,584 bytes for a datetime column and 1,088 bytes for a money data type column.<span>&nbsp; <\/span>So this would point to a design decision around not including 100% unique values as part of the index &ndash; or if you do, choosing a much more compression friendly data type mapped to an associated dimension table.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; text-indent: -0.25in; margin: 0in 0in 0pt 38.4pt\" class=\"MsoListParagraphCxSpMiddle\">\n<span><span><font face=\"Symbol\"><font style=\"font-size: 11pt\">&middot;<\/font><\/font><span style=\"line-height: normal\"><font face=\"Times New Roman\"><font style=\"font-size: 7pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/font><\/span><\/span><\/span><font face=\"Calibri\"><font style=\"font-size: 11pt\">The entry_count column_store_dictionaries column was also very interesting.<span>&nbsp; <\/span>For example, the int data type ProductKey had 158 entries.<span>&nbsp; <\/span>The ShipDate datetime column had 1,126 entries.<span>&nbsp; <\/span>The SalesOrderNumber had 123,662,365 entries. No magic here (and the difference between those entries and the 123,695,104 row count was that the initial data populated didn&rsquo;t use my random GUID values).<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; text-indent: -0.25in; margin: 0in 0in 0pt 38.4pt\" class=\"MsoListParagraphCxSpMiddle\">\n<span><span><font face=\"Symbol\"><font style=\"font-size: 11pt\">&middot;<\/font><\/font><span style=\"line-height: normal\"><font face=\"Times New Roman\"><font style=\"font-size: 7pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/font><\/span><\/span><\/span><font face=\"Calibri\"><font style=\"font-size: 11pt\">The type column from the results told me about the type of dictionary&hellip; For the columns with &ldquo;1&rdquo;, that maps to hash dictionary for integer based columns.<span>&nbsp; <\/span>A type of &ldquo;4&rdquo; represented my float columns. Type &ldquo;3&rdquo; represented the string values.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; text-indent: -0.25in; margin: 0in 0in 10pt 38.4pt\" class=\"MsoListParagraphCxSpLast\">\n<span><span><font face=\"Symbol\"><font style=\"font-size: 11pt\">&middot;<\/font><\/font><span style=\"line-height: normal\"><font face=\"Times New Roman\"><font style=\"font-size: 7pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/font><\/span><\/span><\/span><font face=\"Calibri\"><font style=\"font-size: 11pt\">The flags (&ldquo;internal use only&rdquo;) column from column_store_dictionaries was &ldquo;0&rdquo; for all columns except for UnitPriceDiscountPct (float), DiscountAmount (float), OrderDate\/DueDate\/ShipDate (datetime).<span>&nbsp; <\/span>The flags column was &ldquo;2&rdquo; for the CustomerPONumber (nvarchar(25)) and CarrierTrackingNumber (nvarchar(25)).<span>&nbsp; <\/span>Flags was 0 for everything else, so I&rsquo;m definitely curious about this.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Before I continued, I dropped and recreated the columnstore index, this time <em>without the SalesOrderNumber<\/em>.<span>&nbsp; <\/span><span>&nbsp;<\/span><span>&nbsp;<\/span>It wasn&rsquo;t going to provide any value for my next set of explorations.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<strong><font face=\"Calibri\"><font style=\"font-size: 11pt\">With the SalesOrderNumber column removed, leaving the other columns on the columnstore index, what was the on-disk footprint?<\/font><\/font><\/strong>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">310,400 bytes for the dictionary size &ndash; for 123 million rows (per sys.column_store_dictionaries). <span>&nbsp;<\/span>I double checked sys.dm_db_partition_stats as well and the lob_used_page_count was 304,579.<span>&nbsp; <\/span>So the page count is around 2.3 GB &ndash; and the dictionary size is 310 KB.<span>&nbsp; <\/span>Again, this is for 123,695,104 rows. <span>&nbsp;<\/span>The heap itself is 2,876,461 pages &ndash; or roughly 22.4 GB.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt 2.4pt\" class=\"MsoNormal\">\n<strong><font face=\"Calibri\"><font style=\"font-size: 11pt\">Anything interesting in sys.column_store_segments?<\/font><\/font><\/strong>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt 2.4pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Another great catalog view to explore with many interesting ways to slice and dice this data:<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; text-indent: -0.25in; margin: 0in 0in 0pt 40.8pt\" class=\"MsoListParagraphCxSpFirst\">\n<span><span><font face=\"Symbol\"><font style=\"font-size: 11pt\">&middot;<\/font><\/font><span style=\"line-height: normal\"><font face=\"Times New Roman\"><font style=\"font-size: 7pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/font><\/span><\/span><\/span><font face=\"Calibri\"><font style=\"font-size: 11pt\">All 26 columns had 120 segments associated with them. But what is interesting is that this is for 26 columns &ndash; even though my columnstore index was recreated with just 25 columns.<span>&nbsp; <\/span>So it was segmenting based on each column of the heap (seemingly).<span>&nbsp; <\/span>If you enable trace flag 646 and 3605, you&rsquo;ll see during index creation a message like &ldquo;Column 25 was omitted from VertiPaq during column index build.&rdquo; So it made me wonder if this really did represent 120 segments for the omitted column?<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; text-indent: -0.25in; margin: 0in 0in 0pt 40.8pt\" class=\"MsoListParagraphCxSpMiddle\">\n<span><span><font face=\"Symbol\"><font style=\"font-size: 11pt\">&middot;<\/font><\/font><span style=\"line-height: normal\"><font face=\"Times New Roman\"><font style=\"font-size: 7pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/font><\/span><\/span><\/span><font face=\"Calibri\"><font style=\"font-size: 11pt\">The average row count per segment was 1,030,792 rows and a maximum of 1,048,576.<\/font><span><font style=\"font-size: 11pt\">&nbsp; <\/font><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; text-indent: -0.25in; margin: 0in 0in 0pt 40.8pt\" class=\"MsoListParagraphCxSpMiddle\">\n<span><span><font face=\"Symbol\"><font style=\"font-size: 11pt\">&middot;<\/font><\/font><span style=\"line-height: normal\"><font face=\"Times New Roman\"><font style=\"font-size: 7pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/font><\/span><\/span><\/span><font face=\"Calibri\"><font style=\"font-size: 11pt\">The minimum rows for a segment was 2,416.<\/font><span><font style=\"font-size: 11pt\">&nbsp; <\/font><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; text-indent: -0.25in; margin: 0in 0in 0pt 40.8pt\" class=\"MsoListParagraphCxSpMiddle\">\n<span><span><font face=\"Symbol\"><font style=\"font-size: 11pt\">&middot;<\/font><\/font><span style=\"line-height: normal\"><font face=\"Times New Roman\"><font style=\"font-size: 7pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/font><\/span><\/span><\/span><font face=\"Calibri\"><font style=\"font-size: 11pt\">The 2,416 row count was for all columns on segment number 118. This was not the last segment.<span>&nbsp; <\/span>Segment 119 was the last segment (first segment is 0-based) for each column and each one of these had 1,040,352.<span>&nbsp; <\/span>Eric Hanson gave an explanation on a forum which talks about segments being built on parallel threads and when hitting the end of the table, not having enough rows to completely fill segments.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; text-indent: -0.25in; margin: 0in 0in 0pt 40.8pt\" class=\"MsoListParagraphCxSpMiddle\">\n<span><span><font face=\"Symbol\"><font style=\"font-size: 11pt\">&middot;<\/font><\/font><span style=\"line-height: normal\"><font face=\"Times New Roman\"><font style=\"font-size: 7pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/font><\/span><\/span><\/span><font face=\"Calibri\"><font style=\"font-size: 11pt\">As for encoding_type, that was also interesting.<span>&nbsp; <\/span>Some columns had both an encoding_type of 1 AND 2.<span>&nbsp; <\/span>Only the first five columns of the table had an encoding type of &ldquo;1&rdquo; and then columns 1 through 25 had an encoding type of &ldquo;2&rdquo;.<span>&nbsp; <\/span>Columns 21 and 22 (Freight and CarrierTrackingNumber) had an encoding of 3.<span>&nbsp; <\/span>Freight is money data type and CarrierTrackingNumber is nvarchar(25).<span>&nbsp; <\/span>Column 26 (ShipDate datetime) had an encoding type of &ldquo;4&rdquo;. <span>&nbsp;<\/span>In BOL &ndash; encoding_type is defined as &ldquo;type of encoding used for that segment&rdquo;.<span>&nbsp; <\/span>Sigh.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; text-indent: -0.25in; margin: 0in 0in 10pt 40.8pt\" class=\"MsoListParagraphCxSpLast\">\n<span><span><font face=\"Symbol\"><font style=\"font-size: 11pt\">&middot;<\/font><\/font><span style=\"line-height: normal\"><font face=\"Times New Roman\"><font style=\"font-size: 7pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/font><\/span><\/span><\/span><font face=\"Calibri\"><font style=\"font-size: 11pt\">The min_data_id and max_data_id value rangers were also interesting.<span>&nbsp; <\/span>Sometimes they reflected the actual column data ranges (for example in the date columns) and sometimes not.<span>&nbsp; <\/span>Looking at &ldquo;<\/font><\/font><font style=\"font-size: 11pt\"><a href=\"http:\/\/social.technet.microsoft.com\/wiki\/contents\/articles\/5651.understanding-segment-elimination.aspx\"><font face=\"Calibri\" color=\"#0000ff\"><u>Understanding Segment Elimination<\/u><\/font><\/a><\/font><font face=\"Calibri\"><font style=\"font-size: 11pt\">&rdquo; &ndash; Eric Hanson describes this behavior &ndash; saying that the values in these ranges can also reference &ldquo;into a dictionary&rdquo;. <\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<strong><font face=\"Calibri\"><font style=\"font-size: 11pt\">Anything interesting in sys.column_store_index_stats?<\/font><\/font><\/strong>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">The only noteworthy value was the number_of_segments (3,120).<span>&nbsp; <\/span><\/font><span><font style=\"font-size: 11pt\">&nbsp;<\/font><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<strong><font face=\"Calibri\"><font style=\"font-size: 11pt\">Can I see some segment elimination for my queries? (for non-string types on a heap table)<\/font><\/font><\/strong>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Remember that I created a columnstore index on a heap.<span>&nbsp; <\/span>Let&rsquo;s say we look at the segment ranges for the ProductKey column (column id 1).<span>&nbsp; <\/span>Here are the associated ranges:<\/font><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">SELECT<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#008080\">column_id<\/font><\/span><span><font color=\"#808080\">,<\/font><\/span> <span><font color=\"#008080\">min_data_id<\/font><\/span><span><font color=\"#808080\">,<\/font><\/span> <span><font color=\"#008080\">max_data_id<\/font><\/span><span><font color=\"#808080\">,<\/font><\/span> <\/font><span><font color=\"#008080\" style=\"font-size: 9.5pt\">segment_id<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">FROM<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#008000\">sys<\/font><\/span><span><font color=\"#808080\">.<\/font><\/span><\/font><span><font color=\"#008080\" style=\"font-size: 9.5pt\">column_store_segments<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">WHERE<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#008080\">column_id<\/font><\/span> <span><font color=\"#808080\">=<\/font><\/span> 1<\/font><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">ORDER<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#0000ff\">BY<\/font><\/span> <span><font color=\"#008080\">column_id<\/font><\/span><span><font color=\"#808080\">,<\/font><\/span> <span><font color=\"#008080\">min_data_id<\/font><\/span><span><font color=\"#808080\">,<\/font><\/span> <span><font color=\"#008080\">max_data_id<\/font><\/span><span><font color=\"#808080\">,<\/font><\/span> <\/font><span><font color=\"#008080\" style=\"font-size: 9.5pt\">segment_id;<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">All 120 segments have identical min and max ranges:<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<span><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/01b0dd23\/clip_image003.png\"><img decoding=\"async\" style=\"background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px\" src=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/410e90b3\/clip_image003_thumb.png\" border=\"0\" alt=\"clip_image003\" title=\"clip_image003\" width=\"474\" height=\"376\" \/><\/a><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">What about other columns &ndash; like the DueDate (datetime)?<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<span><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/677073fe\/clip_image004.png\"><img decoding=\"async\" style=\"background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px\" src=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/5fe50491\/clip_image004_thumb.png\" border=\"0\" alt=\"clip_image004\" title=\"clip_image004\" width=\"495\" height=\"293\" \/><\/a><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Same thing applies &ndash; each segment, with the exception of a trailing row, have the same ranges.<\/font><span><font style=\"font-size: 11pt\">&nbsp; <\/font><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<strong><font face=\"Calibri\"><font style=\"font-size: 11pt\">What about segment elimination on a table with a clustered index?<\/font><\/font><\/strong>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">So next I dropped the columnstore index, and created a clustered index on ProductKey.<span>&nbsp; <\/span>I&rsquo;m not saying this is a great choice for the clustered index key &ndash; but rather, I&rsquo;m just trying to understand the behavior in comparison to a heap and also look at any potential segment elimination.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">In the following query, I&rsquo;m pulling total order quantity for three products:<\/font><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><font color=\"#008000\" style=\"font-size: 9.5pt\">&#8212; Segment elimination written to error log<\/font><\/font><\/span><span><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">DBCC<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#008080\">TRACEON<\/font><\/span><span><font color=\"#808080\">(<\/font><\/span>3605<span><font color=\"#808080\">,<\/font><\/span> <span><font color=\"#808080\">&#8211;<\/font><\/span>1<\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">);<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><font color=\"#0000ff\" style=\"font-size: 9.5pt\">GO<\/font><\/font><\/span><span><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">DBCC<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#008080\">TRACEON<\/font><\/span><span><font color=\"#808080\">(<\/font><\/span>646<span><font color=\"#808080\">,<\/font><\/span> <span><font color=\"#808080\">&#8211;<\/font><\/span>1<\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">);<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><font color=\"#0000ff\" style=\"font-size: 9.5pt\">GO<\/font><\/font><\/span><span><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><font style=\"font-size: 9.5pt\"><\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><font style=\"font-size: 9.5pt\"><\/font><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">SELECT<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"><span> <\/span><span><font color=\"#008080\">ProductKey<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[DueDateKey]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#ff00ff\">SUM<\/font><\/span><span><font color=\"#808080\">(<\/font><\/span><span><font color=\"#008080\">OrderQuantity<\/font><\/span><span><font color=\"#808080\">)<\/font><\/span> <\/font><span><font color=\"#008080\" style=\"font-size: 9.5pt\">Total_OrderQuantity<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">FROM<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#008080\">[dbo]<\/font><\/span><span><font color=\"#808080\">.<\/font><\/span><\/font><span><font color=\"#008080\" style=\"font-size: 9.5pt\">[FactInternetSales]<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">GROUP<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#0000ff\">BY<\/font><\/span> <span><font color=\"#008080\">ProductKey<\/font><\/span><span><font color=\"#808080\">,<\/font><\/span> <\/font><span><font color=\"#008080\" style=\"font-size: 9.5pt\">DueDateKey<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">HAVING<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"><span> <\/span><span><font color=\"#008080\">ProductKey<\/font><\/span> <\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">IN<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/font><\/span><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#808080\">(<\/font><\/span><\/font><span><font style=\"font-size: 9.5pt\">478<span><font color=\"#808080\">,<\/font><\/span> 343<span><font color=\"#808080\">,<\/font><\/span> 574<\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">);<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">I first validated that batch mode was indeed being used:<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<span><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/34343a95\/clip_image005.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px\" src=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/05dab4e8\/clip_image005_thumb.png\" border=\"0\" alt=\"clip_image005\" title=\"clip_image005\" width=\"440\" height=\"152\" \/><\/a><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">I then looked at the SQL Error Log (per the trace flag) &ndash; and I saw the storage engine skipped 28 &ldquo;row group&rdquo; (segments):<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<span><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/4c57a4f0\/clip_image007.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px\" src=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/6185aa98\/clip_image007_thumb.png\" border=\"0\" alt=\"clip_image007\" title=\"clip_image007\" width=\"643\" height=\"455\" \/><\/a><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">If I look at the segment meta data though for column_id 1, and I see blocks of segments covering the same ranges (instead of the same ranges across all segments):<\/font><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">SELECT<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#008080\">segment_id<\/font><\/span><span><font color=\"#808080\">,<\/font><\/span> <span><font color=\"#008080\">min_data_id<\/font><\/span><span><font color=\"#808080\">,<\/font><\/span> <\/font><span><font color=\"#008080\" style=\"font-size: 9.5pt\">max_data_id<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">FROM<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#008000\">sys<\/font><\/span><span><font color=\"#808080\">.<\/font><\/span><\/font><span><font color=\"#008080\" style=\"font-size: 9.5pt\">column_store_segments<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">WHERE<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#008080\">column_id<\/font><\/span> <span><font color=\"#808080\">=<\/font><\/span> 1<\/font><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">ORDER<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#0000ff\">BY<\/font><\/span> <\/font><span><font color=\"#008080\" style=\"font-size: 9.5pt\">segment_id<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<span><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/721da586\/clip_image009.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px\" src=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/1f329255\/clip_image009_thumb.png\" border=\"0\" alt=\"clip_image009\" title=\"clip_image009\" width=\"257\" height=\"515\" \/><\/a><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">By the way, the 28 segment elimination I saw in the error log for column 1 translated to 27,226,112 rows across (row_count from sys.column_store_segments).<span>&nbsp; <\/span>The query itself takes less than 1 second to return 569 rows &ndash; from a 120 million+ row table.<\/font><span><font style=\"font-size: 11pt\">&nbsp; <\/font><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<strong><font face=\"Calibri\"><font style=\"font-size: 11pt\">Will I get segment elimination on other columns not part of the clustered index key?<\/font><\/font><\/strong>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">I tried the following query that filtered on DueDateKey:<\/font><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">SELECT<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"><span> <\/span><span><font color=\"#008080\">ProductKey<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#008080\">[DueDateKey]<\/font><\/span><\/font><span><font color=\"#808080\" style=\"font-size: 9.5pt\">,<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\"><span><font color=\"#ff00ff\">SUM<\/font><\/span><span><font color=\"#808080\">(<\/font><\/span><span><font color=\"#008080\">OrderQuantity<\/font><\/span><span><font color=\"#808080\">)<\/font><\/span> <\/font><span><font color=\"#008080\" style=\"font-size: 9.5pt\">Total_OrderQuantity<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">FROM<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#008080\">[dbo]<\/font><\/span><span><font color=\"#808080\">.<\/font><\/span><\/font><span><font color=\"#008080\" style=\"font-size: 9.5pt\">[FactInternetSales]<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">GROUP<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#0000ff\">BY<\/font><\/span> <span><font color=\"#008080\">ProductKey<\/font><\/span><span><font color=\"#808080\">,<\/font><\/span> <\/font><span><font color=\"#008080\" style=\"font-size: 9.5pt\">DueDateKey<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">HAVING<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"><span> <\/span><span><font color=\"#008080\">DueDateKey<\/font><\/span> <span><font color=\"#808080\">=<\/font><\/span> 20040522<\/font><\/span><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Nope.<span>&nbsp; <\/span>While the query still ran in less than a second &ndash; using batch instead of row mode for the columnstore index scan, segment elimination event did not occur.<span>&nbsp; <\/span>Looking at the min and max ranges from sys.column_store_segments helps answer why segment elimination wasn&rsquo;t possible:<\/font><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">SELECT<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#008080\">column_id<\/font><\/span><span><font color=\"#808080\">,<\/font><\/span> <span><font color=\"#008080\">min_data_id<\/font><\/span><span><font color=\"#808080\">,<\/font><\/span> <span><font color=\"#008080\">max_data_id<\/font><\/span><span><font color=\"#808080\">,<\/font><\/span> <\/font><span><font color=\"#008080\" style=\"font-size: 9.5pt\">segment_id<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">FROM<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#008000\">sys<\/font><\/span><span><font color=\"#808080\">.<\/font><\/span><\/font><span><font color=\"#008080\" style=\"font-size: 9.5pt\">column_store_segments<\/font><\/span><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 9.5pt\">WHERE<\/font><\/font><\/span><span><font style=\"font-size: 9.5pt\"> <span><font color=\"#008080\">column_id<\/font><\/span> <span><font color=\"#808080\">=<\/font><\/span> 3 <span><font color=\"#808080\">AND<\/font><\/span> <\/font><\/span><\/font>\n<\/p>\n<p style=\"line-height: normal; margin: 0in 0in 0pt\" class=\"MsoNormal\">\n<span><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><font style=\"font-size: 9.5pt\">20040522 <span><font color=\"#808080\">BETWEEN<\/font><\/span> <span><font color=\"#008080\">min_data_id<\/font><\/span> <span><font color=\"#808080\">AND<\/font><\/span> <\/font><span><font color=\"#008080\" style=\"font-size: 9.5pt\">max_data_id<\/font><\/span><\/font><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">This returns all 120 rows:<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<span><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/4c477f23\/clip_image011.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px\" src=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/0485f63c\/clip_image011_thumb.png\" border=\"0\" alt=\"clip_image011\" title=\"clip_image011\" width=\"435\" height=\"350\" \/><\/a><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<strong><font face=\"Calibri\"><font style=\"font-size: 11pt\">What if the DueDateKey is a secondary key column on the clustered index?<\/font><span><font style=\"font-size: 11pt\">&nbsp; <\/font><\/span><\/font><\/strong>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">I dropped the columnstore index and recreated the clustered index with ProductKey and DueDateKey.<span>&nbsp; <\/span>I then recreated the columnstore index.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Checking the DueDateKey range in sys.column_store_segments, I see the ranges are no longer identical:<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<span><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/5c071427\/clip_image013.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px\" src=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/742a7e82\/clip_image013_thumb.png\" border=\"0\" alt=\"clip_image013\" title=\"clip_image013\" width=\"397\" height=\"345\" \/><\/a><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">That seemed promising, so I executed the query filtering by DueDateKey:<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<span><a href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/5a564853\/clip_image015.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px\" src=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/792cbc31\/clip_image015_thumb.png\" border=\"0\" alt=\"clip_image015\" title=\"clip_image015\" width=\"780\" height=\"227\" \/><\/a><\/span>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Sure enough &ndash; I had segment elimination, even though this was defined as the second column in the clustered index key.<span>&nbsp; <\/span>And what&rsquo;s more, my ProductKey column segment elimination was still working (I tested the earlier queries again).<span>&nbsp; <\/span>This raises some interesting questions around new clustered index key strategies when you know your table will primarily be used with a columnstore index.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\">Okay &ndash; that&rsquo;s enough for today.<span>&nbsp; <\/span>I still have <em>many<\/em> other scenarios I&rsquo;d like to try out, and I&rsquo;ll share here when I get the opportunity.<\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<strong><font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font><\/strong>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font>\n<\/p>\n<p style=\"line-height: 13pt; margin: 0in 0in 10pt\" class=\"MsoNormal\">\n<font face=\"Calibri\"><font style=\"font-size: 11pt\"><\/font><\/font><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I was interested in exploring various questions about columnstore indexing this morning &ndash; and I realized I should probably blog about what I observed.&nbsp; This truly was just an exploration and not a formal test (call it semi-structured fiddling).&nbsp; Also, some of my &ldquo;questions&rdquo; were really just confirmations.&nbsp; While I believe what I read, I [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16,28],"tags":[],"class_list":["post-505","post","type-post","status-publish","format-standard","hentry","category-columnstore-indexes","category-performance"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.9.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Exploring Columnstore Index Metadata, Segment Distribution and Elimination Behaviors - Joe Sack<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/exploring-columnstore-index-metadata-segment-distribution-and-elimination-behaviors\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Exploring Columnstore Index Metadata, Segment Distribution and Elimination Behaviors - Joe Sack\" \/>\n<meta property=\"og:description\" content=\"I was interested in exploring various questions about columnstore indexing this morning &ndash; and I realized I should probably blog about what I observed.&nbsp; This truly was just an exploration and not a formal test (call it semi-structured fiddling).&nbsp; Also, some of my &ldquo;questions&rdquo; were really just confirmations.&nbsp; While I believe what I read, I [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/joe\/exploring-columnstore-index-metadata-segment-distribution-and-elimination-behaviors\/\" \/>\n<meta property=\"og:site_name\" content=\"Joe Sack\" \/>\n<meta property=\"article:published_time\" content=\"2012-02-25T05:39:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-01-03T04:32:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/0289430d\/clip_image002_thumb.png\" \/>\n<meta name=\"author\" content=\"Joseph Sack\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joseph Sack\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/exploring-columnstore-index-metadata-segment-distribution-and-elimination-behaviors\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/exploring-columnstore-index-metadata-segment-distribution-and-elimination-behaviors\/\",\"name\":\"Exploring Columnstore Index Metadata, Segment Distribution and Elimination Behaviors - Joe Sack\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#website\"},\"datePublished\":\"2012-02-25T05:39:00+00:00\",\"dateModified\":\"2013-01-03T04:32:26+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/exploring-columnstore-index-metadata-segment-distribution-and-elimination-behaviors\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/joe\/exploring-columnstore-index-metadata-segment-distribution-and-elimination-behaviors\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/exploring-columnstore-index-metadata-segment-distribution-and-elimination-behaviors\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Columnstore indexes\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/category\/columnstore-indexes\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Exploring Columnstore Index Metadata, Segment Distribution and Elimination Behaviors\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/\",\"name\":\"Joe Sack\",\"description\":\"SQL Server Performance Tuning, High Availability and Disaster Recovery Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648\",\"name\":\"Joseph Sack\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g\",\"caption\":\"Joseph Sack\"},\"description\":\"Joe Sack is a Principal Consultant with SQLskills. He has worked as a SQL Server professional since 1997 and has supported and developed for SQL Server environments in financial services, IT consulting, manufacturing, retail and the real estate industry. Prior to joining SQLskills he worked at Microsoft as a Premier Field Engineer supporting very large enterprise customer environments. He was responsible for providing deep SQL Server advisory services, training, troubleshooting and ongoing solutions guidance. His areas of expertise include performance tuning, scalability, T-SQL development and high-availability. In 2006 Joe earned the \u201cMicrosoft Certified Master: SQL Server 2005\u201d certification and in 2008 he earned the \u201cMicrosoft Certified Master: SQL Server 2008\u201d certification. In 2009 he took over responsibility for the entire SQL Server Microsoft Certified Master program and held that post until 2011. He was given the SQL Server MVP award in 2013.\",\"sameAs\":[\"http:\/\/3.209.169.194\/blogs\/joe\",\"https:\/\/twitter.com\/https:\/\/twitter.com\/josephsack\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/author\/joe\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Exploring Columnstore Index Metadata, Segment Distribution and Elimination Behaviors - Joe Sack","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sqlskills.com\/blogs\/joe\/exploring-columnstore-index-metadata-segment-distribution-and-elimination-behaviors\/","og_locale":"en_US","og_type":"article","og_title":"Exploring Columnstore Index Metadata, Segment Distribution and Elimination Behaviors - Joe Sack","og_description":"I was interested in exploring various questions about columnstore indexing this morning &ndash; and I realized I should probably blog about what I observed.&nbsp; This truly was just an exploration and not a formal test (call it semi-structured fiddling).&nbsp; Also, some of my &ldquo;questions&rdquo; were really just confirmations.&nbsp; While I believe what I read, I [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/joe\/exploring-columnstore-index-metadata-segment-distribution-and-elimination-behaviors\/","og_site_name":"Joe Sack","article_published_time":"2012-02-25T05:39:00+00:00","article_modified_time":"2013-01-03T04:32:26+00:00","og_image":[{"url":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/79dc16ea2148\/0289430d\/clip_image002_thumb.png"}],"author":"Joseph Sack","twitter_misc":{"Written by":"Joseph Sack","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/exploring-columnstore-index-metadata-segment-distribution-and-elimination-behaviors\/","url":"https:\/\/www.sqlskills.com\/blogs\/joe\/exploring-columnstore-index-metadata-segment-distribution-and-elimination-behaviors\/","name":"Exploring Columnstore Index Metadata, Segment Distribution and Elimination Behaviors - Joe Sack","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#website"},"datePublished":"2012-02-25T05:39:00+00:00","dateModified":"2013-01-03T04:32:26+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/exploring-columnstore-index-metadata-segment-distribution-and-elimination-behaviors\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/joe\/exploring-columnstore-index-metadata-segment-distribution-and-elimination-behaviors\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/exploring-columnstore-index-metadata-segment-distribution-and-elimination-behaviors\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/joe\/"},{"@type":"ListItem","position":2,"name":"Columnstore indexes","item":"https:\/\/www.sqlskills.com\/blogs\/joe\/category\/columnstore-indexes\/"},{"@type":"ListItem","position":3,"name":"Exploring Columnstore Index Metadata, Segment Distribution and Elimination Behaviors"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/joe\/","name":"Joe Sack","description":"SQL Server Performance Tuning, High Availability and Disaster Recovery Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/joe\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648","name":"Joseph Sack","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g","caption":"Joseph Sack"},"description":"Joe Sack is a Principal Consultant with SQLskills. He has worked as a SQL Server professional since 1997 and has supported and developed for SQL Server environments in financial services, IT consulting, manufacturing, retail and the real estate industry. Prior to joining SQLskills he worked at Microsoft as a Premier Field Engineer supporting very large enterprise customer environments. He was responsible for providing deep SQL Server advisory services, training, troubleshooting and ongoing solutions guidance. His areas of expertise include performance tuning, scalability, T-SQL development and high-availability. In 2006 Joe earned the \u201cMicrosoft Certified Master: SQL Server 2005\u201d certification and in 2008 he earned the \u201cMicrosoft Certified Master: SQL Server 2008\u201d certification. In 2009 he took over responsibility for the entire SQL Server Microsoft Certified Master program and held that post until 2011. He was given the SQL Server MVP award in 2013.","sameAs":["http:\/\/3.209.169.194\/blogs\/joe","https:\/\/twitter.com\/https:\/\/twitter.com\/josephsack"],"url":"https:\/\/www.sqlskills.com\/blogs\/joe\/author\/joe\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts\/505","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/comments?post=505"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts\/505\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/media?parent=505"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/categories?post=505"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/tags?post=505"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}