<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivos ColumnStore Index - Diego Nogare</title>
	<atom:link href="https://diegonogare.net/tags/columnstore-index/feed/" rel="self" type="application/rss+xml" />
	<link>https://diegonogare.net/tags/columnstore-index/</link>
	<description>Consultor Executivo de IA &#38; ML</description>
	<lastBuildDate>Thu, 14 Feb 2013 16:48:18 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://i0.wp.com/diegonogare.net/wp-content/uploads/2025/06/cropped-cropped-DN-Black-300x300-1.png?fit=32%2C32&#038;ssl=1</url>
	<title>Arquivos ColumnStore Index - Diego Nogare</title>
	<link>https://diegonogare.net/tags/columnstore-index/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">247556142</site>	<item>
		<title>Comparativo de inserção de dados em uma tabela com ColumnStore Index</title>
		<link>https://diegonogare.net/2013/02/comparativo-de-insero-de-dados-em-uma-tabela-com-columnstore-index/</link>
		
		<dc:creator><![CDATA[Diego Nogare]]></dc:creator>
		<pubDate>Thu, 14 Feb 2013 16:48:18 +0000</pubDate>
				<category><![CDATA[Artigo]]></category>
		<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[Informativo]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Tech Ed Brasil]]></category>
		<category><![CDATA[TechNet]]></category>
		<category><![CDATA[Virtual PASS BR]]></category>
		<category><![CDATA[bi]]></category>
		<category><![CDATA[business intelligence]]></category>
		<category><![CDATA[ColumnStore Index]]></category>
		<category><![CDATA[comparativo]]></category>
		<category><![CDATA[desempenho]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[sql server]]></category>
		<guid isPermaLink="false">http://diegonogare.net/?p=343</guid>

					<description><![CDATA[<p>Fala galera, o ColumnStore Index é um novo formato de índice que foi lançado junto ao SQL Server 2012, este índice usa um padrão de compressão de dados proprietário da Microsoft e altera o formato de armazenamento dos dados nas páginas do índice. A primeira vez que um registro é inserido no índice, ele registra...</p>
<p>O post <a href="https://diegonogare.net/2013/02/comparativo-de-insero-de-dados-em-uma-tabela-com-columnstore-index/">Comparativo de inserção de dados em uma tabela com ColumnStore Index</a> apareceu primeiro em <a href="https://diegonogare.net">Diego Nogare</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Fala galera, o <strong>ColumnStore Index</strong> é um novo formato de índice que foi lançado junto ao SQL Server 2012, este índice usa um padrão de compressão de dados proprietário da Microsoft e altera o formato de armazenamento dos dados nas páginas do índice. A primeira vez que um registro é inserido no índice, ele registra o dado bruto, qualquer outra aparição deste mesmo dado dentro do índice, o SQL faz um apontamento de memória para o primeiro registro, diminuindo significativamente o tamanho da página com os índices.</p>
<p>Este novo formato de índice não chegou para substituir os já convencionais e úteis <strong>Clustered</strong> e <strong>Non-Clustered</strong>, ele vem para atender um outro cenário. O armazenamento do ColumnStore Index altera a escrita dos dados do índice que estamos acostumados a ver em um padrão linear (como a figura abaixo).</p>
<p><a href="https://i0.wp.com/blogdiegonogare.azurewebsites.net/wp-content/uploads/2013/02/image-1.png"><img data-recalc-dims="1" fetchpriority="high" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i0.wp.com/blogdiegonogare.azurewebsites.net/wp-content/uploads/2013/02/image_thumb-1.png?resize=550%2C172" alt="image" width="550" height="172" border="0" /></a></p>
<p>Para um formato colunar – <em>por isso o nome ColumnStore</em> – armazenando todos os registros da coluna em uma mesma página. Uma representação visula seria como a imagem abaixo:</p>
<p><a href="https://i0.wp.com/blogdiegonogare.azurewebsites.net/wp-content/uploads/2013/02/image1-1.png"><img data-recalc-dims="1" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i0.wp.com/blogdiegonogare.azurewebsites.net/wp-content/uploads/2013/02/image_thumb1-1.png?resize=550%2C234" alt="image" width="550" height="234" border="0" /></a></p>
<p>Os ganhos de performance com o uso correto do ColumnStore Index varia entre 10 e 100X. Podendo, em alguns casos reais que já presenciei, chegar a retornos 400X mais rápidos. Porém o ColumnStore Index não é só maravilhas. A utilização deste índice em uma tabela a transforma em Read Only, impedindo manutenção nos dados já existentes. Este cenário de dados como somente leitura nos remete à ambientes de Data Warehouse, onde a informação armazenada sobre manutenção incremental em determinados momentos do ciclo. Em alguns casos sendo incrementado somente uma vez por noite, em outros cenários somente uma atualização semanal, em um terceiro podendo ser uma vez por mês. Isso varia de acordo com a necessidade da área de negócios.</p>
<blockquote><p>Agora, se a tabela está em um formato Read Only, como podemos inserir dados incrementais nela???</p></blockquote>
<p>Pensando sobre como implementar estes incrementos, vem à mente 3 possibilidades. Podemos <strong>desabilitar, inserir e reabilitar</strong> o índice, <strong>remover, inserir e recriar</strong> o índice ou então trabalhar com <strong>Particionamento de Tabelas</strong>, onde temos as partições com o índice e uma tabela onde serão inseridos os dados.</p>
<p>Para colocar em comparação estes três cenários, montei um ambiente de teste com aproximadamente 35Milhões de linhas e fiz comparativo entre eles.</p>
<p>Veja o comparativo abaixo entre Logical Read dos três cenários, e também o tempo necessário para realizar cada atividade.</p>
<p><a href="https://i0.wp.com/blogdiegonogare.azurewebsites.net/wp-content/uploads/2013/02/image2-1.png"><img data-recalc-dims="1" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i0.wp.com/blogdiegonogare.azurewebsites.net/wp-content/uploads/2013/02/image_thumb2-1.png?resize=550%2C330" alt="image" width="550" height="330" border="0" /></a></p>
<p><a href="https://i0.wp.com/blogdiegonogare.azurewebsites.net/wp-content/uploads/2013/02/image3-1.png"><img data-recalc-dims="1" loading="lazy" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i0.wp.com/blogdiegonogare.azurewebsites.net/wp-content/uploads/2013/02/image_thumb3-1.png?resize=550%2C330" alt="image" width="550" height="330" border="0" /></a></p>
<p align="left">O teste consistiu em <strong>criar uma tabela com 33milhões</strong> de registros e aplicar o <strong>ColumnStore Index</strong> nesta tabela. Em seguida, <strong>adicionar mais 1.6Milhões</strong> de linhas… Realizamos o teste no mesmo ambiente 2 vezes, e tiramos a média tanto de <strong><em>Logical Reads</em></strong> quanto de <strong><em>Elapsed Time</em></strong> do processo.</p>
<p>Os resultados provam que a melhor solução, disparada, é a utilização de <strong>Partition Table</strong>. A alguns meses eu havia escrito uma série com 7 posts sobre o assunto, e acredito que podem ser aproveitados para o entendimento do que fiz neste exemplo.</p>
<p><a href="https://diegonogare.net/2012/10/partition-table-particionamento-de-tabelas-parte1/" target="_blank" rel="noopener noreferrer">Partition Table (Particionamento de Tabelas) – Parte#1</a></p>
<p><a href="https://diegonogare.net/2012/10/partition-table-cenariosbeneficios-parte2/" target="_blank" rel="noopener noreferrer">Partition Table (Cenários/Benefícios) – Parte#2</a></p>
<p><a href="https://diegonogare.net/2012/10/partition-table-definicoesterminologias-parte3/" target="_blank" rel="noopener noreferrer">Partition Table (Definições/Terminologias) – Parte#3</a></p>
<p><a href="https://diegonogare.net/2012/10/partition-table-criando-filegroup-parte4/" target="_blank" rel="noopener noreferrer">Partition Table (Criando Filegroup) – Parte#4</a></p>
<p><a href="https://diegonogare.net/2012/10/partition-table-criando-partition-function-parte5/" target="_blank" rel="noopener noreferrer">Partition Table (Criando Partition Function) – Parte#5</a></p>
<p><a href="https://diegonogare.net/2012/11/partition-table-criando-o-partition-scheme-parte6/" target="_blank" rel="noopener noreferrer">Partition Table (Criando o Partition Scheme) – Parte#6</a></p>
<p><a href="https://diegonogare.net/2012/11/partition-table-criando-a-tabela-parte7/" target="_blank" rel="noopener noreferrer">Partition Table (Criando a tabela) – Parte#7</a></p>
<p>Caso alguém queira simular o processo que utilizei, segue abaixo a criação do ambiente e a população das tabelas com poucos dados. É claro que para você simular a mesma coisa que fiz aqui, você precisa adaptar este código abaixo para seu cenário.</p>
<div class="csharpcode">
<pre class="alt">/*******************************************/</pre>
<pre>/*********** CRIAÇÃO DO AMBIENTE ***********/</pre>
<pre class="alt">/*******************************************/</pre>
<pre></pre>
<pre class="alt"><span class="kwrd">CREATE</span> <span class="kwrd">DATABASE</span> ngrSolutionsDW</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"></pre>
<pre><span class="kwrd">USE</span> ngrSolutionsDW</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre></pre>
<pre class="alt">/*******************************************/</pre>
<pre>/*********** LIMPEZA DO AMBIENTE ***********/</pre>
<pre class="alt">/*******************************************/</pre>
<pre></pre>
<pre class="alt"><span class="kwrd">USE</span> ngrSolutionsDW</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"></pre>
<pre><span class="kwrd">DROP</span> <span class="kwrd">SEQUENCE</span> seq_Codigo</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre><span class="kwrd">DROP</span> <span class="kwrd">TABLE</span> tabelaProducao</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre><span class="kwrd">DROP</span> <span class="kwrd">TABLE</span> tabelaProducao_v2</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre><span class="kwrd">DROP</span> PARTITION SCHEME ps_DataAtualizacao</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre><span class="kwrd">DROP</span> PARTITION <span class="kwrd">FUNCTION</span> pf_DataAtualizacao</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre></pre>
<pre class="alt">/*******************************************/</pre>
<pre>/********** POPULAÇÃO DO AMBIENTE **********/</pre>
<pre class="alt">/*******************************************/</pre>
<pre></pre>
<pre class="alt"><span class="kwrd">CREATE</span> <span class="kwrd">TABLE</span> tabelaProducao(</pre>
<pre>      id <span class="kwrd">INT</span> <span class="kwrd">NOT</span> <span class="kwrd">NULL</span></pre>
<pre class="alt">    , idOrigem <span class="kwrd">INT</span> <span class="kwrd">NOT</span> <span class="kwrd">NULL</span></pre>
<pre>    , nome <span class="kwrd">VARCHAR</span>(20) <span class="kwrd">NOT</span> <span class="kwrd">NULL</span></pre>
<pre class="alt">    , endereco <span class="kwrd">VARCHAR</span>(30) <span class="kwrd">NOT</span> <span class="kwrd">NULL</span></pre>
<pre>    , dataCadastro <span class="kwrd">date</span> <span class="kwrd">NOT</span> <span class="kwrd">NULL</span></pre>
<pre class="alt">    , dataAtualizacao <span class="kwrd">date</span> <span class="kwrd">NOT</span> <span class="kwrd">NULL</span>  )</pre>
<pre><span class="kwrd">ON</span> [<span class="kwrd">PRIMARY</span>]</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre></pre>
<pre class="alt"><span class="kwrd">ALTER</span> <span class="kwrd">TABLE</span> tabelaProducao <span class="kwrd">WITH</span> <span class="kwrd">CHECK</span> <span class="kwrd">ADD</span></pre>
<pre>    <span class="kwrd">CONSTRAINT</span> [validarCodigo_V1_Check]    <span class="kwrd">CHECK</span></pre>
<pre class="alt">    (dataAtualizacao &gt;= <span class="str">'2010-01-01'</span> <span class="kwrd">and</span> dataAtualizacao &lt; <span class="str">'2013-03-01'</span>)</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"><span class="kwrd">ALTER</span> <span class="kwrd">TABLE</span> tabelaProducao <span class="kwrd">CHECK</span> <span class="kwrd">CONSTRAINT</span> [validarCodigo_V1_Check]</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"></pre>
<pre><span class="kwrd">CREATE</span> <span class="kwrd">SEQUENCE</span> seq_Codigo <span class="kwrd">AS</span> <span class="kwrd">INT</span></pre>
<pre class="alt">INCREMENT <span class="kwrd">BY</span> 1</pre>
<pre>minvalue 1</pre>
<pre class="alt">maxvalue 10000</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"></pre>
<pre>/* 1K registros de SETEMBRO 2012 */</pre>
<pre class="alt">insert <span class="kwrd">into</span> tabelaProducao(id, idOrigem, nome,</pre>
<pre>            endereco, dataCadastro, dataAtualizacao)</pre>
<pre class="alt"><span class="kwrd">values</span> (<span class="kwrd">next</span> <span class="kwrd">value</span> <span class="kwrd">for</span> seq_Codigo, <span class="kwrd">convert</span>(<span class="kwrd">int</span>,rand()*100)+1,</pre>
<pre>    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,20),</pre>
<pre class="alt">    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,30),</pre>
<pre>    dateadd(<span class="kwrd">month</span>,-5, <span class="kwrd">convert</span>(datetime, getdate())),</pre>
<pre class="alt">    dateadd(<span class="kwrd">month</span>,-5, <span class="kwrd">convert</span>(datetime, getdate())))</pre>
<pre><span class="kwrd">go</span> 1000</pre>
<pre class="alt"></pre>
<pre>/* 1K registros de OUTUBRO 2012 */</pre>
<pre class="alt">insert <span class="kwrd">into</span> tabelaProducao(id, idOrigem, nome,</pre>
<pre>            endereco, dataCadastro, dataAtualizacao)</pre>
<pre class="alt"><span class="kwrd">values</span> (<span class="kwrd">next</span> <span class="kwrd">value</span> <span class="kwrd">for</span> seq_Codigo, <span class="kwrd">convert</span>(<span class="kwrd">int</span>,rand()*100)+1,</pre>
<pre>    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,20),</pre>
<pre class="alt">    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,30),</pre>
<pre>    dateadd(<span class="kwrd">month</span>,-4, <span class="kwrd">convert</span>(datetime, getdate())),</pre>
<pre class="alt">    dateadd(<span class="kwrd">month</span>,-4, <span class="kwrd">convert</span>(datetime, getdate())))</pre>
<pre><span class="kwrd">go</span> 1000</pre>
<pre class="alt"></pre>
<pre>/* 1K registros de NOVEMBRO 2012 */</pre>
<pre class="alt">insert <span class="kwrd">into</span> tabelaProducao(id, idOrigem, nome,</pre>
<pre>            endereco, dataCadastro, dataAtualizacao)</pre>
<pre class="alt"><span class="kwrd">values</span> (<span class="kwrd">next</span> <span class="kwrd">value</span> <span class="kwrd">for</span> seq_Codigo, <span class="kwrd">convert</span>(<span class="kwrd">int</span>,rand()*100)+1,</pre>
<pre>    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,20),</pre>
<pre class="alt">    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,30),</pre>
<pre>    dateadd(<span class="kwrd">month</span>,-3, <span class="kwrd">convert</span>(datetime, getdate())),</pre>
<pre class="alt">    dateadd(<span class="kwrd">month</span>,-3, <span class="kwrd">convert</span>(datetime, getdate())))</pre>
<pre><span class="kwrd">go</span> 1000</pre>
<pre class="alt"></pre>
<pre>/* 1K registros de DEZEMBRO 2012 */</pre>
<pre class="alt">insert <span class="kwrd">into</span> tabelaProducao(id, idOrigem, nome,</pre>
<pre>            endereco, dataCadastro, dataAtualizacao)</pre>
<pre class="alt"><span class="kwrd">values</span> (<span class="kwrd">next</span> <span class="kwrd">value</span> <span class="kwrd">for</span> seq_Codigo, <span class="kwrd">convert</span>(<span class="kwrd">int</span>,rand()*100)+1,</pre>
<pre>    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,20),</pre>
<pre class="alt">    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,30),</pre>
<pre>    dateadd(<span class="kwrd">month</span>,-2, <span class="kwrd">convert</span>(datetime, getdate())),</pre>
<pre class="alt">    dateadd(<span class="kwrd">month</span>,-2, <span class="kwrd">convert</span>(datetime, getdate())))</pre>
<pre><span class="kwrd">go</span> 1000</pre>
<pre class="alt"></pre>
<pre>/* 1K registros de JANEIRO 2013 */</pre>
<pre class="alt">insert <span class="kwrd">into</span> tabelaProducao(id, idOrigem, nome,</pre>
<pre>            endereco, dataCadastro, dataAtualizacao)</pre>
<pre class="alt"><span class="kwrd">values</span> (<span class="kwrd">next</span> <span class="kwrd">value</span> <span class="kwrd">for</span> seq_Codigo, <span class="kwrd">convert</span>(<span class="kwrd">int</span>,rand()*100)+1,</pre>
<pre>    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,20),</pre>
<pre class="alt">    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,30),</pre>
<pre>    dateadd(<span class="kwrd">month</span>,-1, <span class="kwrd">convert</span>(datetime, getdate())),</pre>
<pre class="alt">    dateadd(<span class="kwrd">month</span>,-1, <span class="kwrd">convert</span>(datetime, getdate())))</pre>
<pre><span class="kwrd">go</span> 1000</pre>
<pre class="alt"></pre>
<pre>/* 500 registros de FEVEREIRO 2013 */</pre>
<pre class="alt">insert <span class="kwrd">into</span> tabelaProducao(id, idOrigem, nome,</pre>
<pre>            endereco, dataCadastro, dataAtualizacao)</pre>
<pre class="alt"><span class="kwrd">values</span> (<span class="kwrd">next</span> <span class="kwrd">value</span> <span class="kwrd">for</span> seq_Codigo, <span class="kwrd">convert</span>(<span class="kwrd">int</span>,rand()*100)+1,</pre>
<pre>    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,20),</pre>
<pre class="alt">    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,30),</pre>
<pre>    getdate(), getdate())</pre>
<pre class="alt"><span class="kwrd">go</span> 500</pre>
<pre></pre>
<pre class="alt"><span class="kwrd">SET</span> <span class="kwrd">STATISTICS</span> IO <span class="kwrd">ON</span>; <span class="kwrd">SET</span> <span class="kwrd">STATISTICS</span> <span class="kwrd">TIME</span> <span class="kwrd">ON</span></pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"></pre>
<pre>/**************************************************************************/</pre>
<pre class="alt">/**************************** DISABLE / REBUILD ***************************/</pre>
<pre>/**************************************************************************/</pre>
<pre class="alt"></pre>
<pre>/*******************************************/</pre>
<pre class="alt">/************ CRIAÇÃO DO <span class="kwrd">INDEX</span> *************/</pre>
<pre>/*******************************************/</pre>
<pre class="alt"><span class="kwrd">CREATE</span> <span class="kwrd">NONCLUSTERED</span> COLUMNSTORE <span class="kwrd">INDEX</span> [idx_csi_tabelaProducao]</pre>
<pre><span class="kwrd">ON</span> tabelaProducao ( id, nome, endereco, dataCadastro, dataAtualizacao )</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre></pre>
<pre class="alt">/*******************************************/</pre>
<pre>/******** INSERIR NA TABELA DE PROD ********/</pre>
<pre class="alt">/*******************************************/</pre>
<pre></pre>
<pre class="alt">/* +1 em FEVEREIRO 2013 */</pre>
<pre><span class="rem">-- Forçar o erro por causa que a tabela está com ColumnStore Index</span></pre>
<pre class="alt">insert <span class="kwrd">into</span> tabelaProducao(id, idOrigem, nome,</pre>
<pre>            endereco, dataCadastro, dataAtualizacao)</pre>
<pre class="alt"><span class="kwrd">values</span> (<span class="kwrd">next</span> <span class="kwrd">value</span> <span class="kwrd">for</span> seq_Codigo, <span class="kwrd">convert</span>(<span class="kwrd">int</span>,rand()*100)+1,</pre>
<pre>    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,20),</pre>
<pre class="alt">    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,30),</pre>
<pre>    getdate(), getdate())</pre>
<pre class="alt"></pre>
<pre>/*******************************************/</pre>
<pre class="alt">/************ DISABLE / REBUILD ************/</pre>
<pre>/*******************************************/</pre>
<pre class="alt"><span class="kwrd">ALTER</span> <span class="kwrd">INDEX</span> idx_csi_tabelaProducao <span class="kwrd">ON</span> tabelaProducao DISABLE</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"><span class="kwrd">ALTER</span> <span class="kwrd">INDEX</span> idx_csi_tabelaProducao <span class="kwrd">ON</span> tabelaProducao REBUILD</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"></pre>
<pre>/*******************************************/</pre>
<pre class="alt">/************ POPULAR A TABELA *************/</pre>
<pre>/*******************************************/</pre>
<pre class="alt"><span class="kwrd">ALTER</span> <span class="kwrd">INDEX</span> idx_csi_tabelaProducao <span class="kwrd">ON</span> tabelaProducao DISABLE</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"></pre>
<pre>insert <span class="kwrd">into</span> tabelaProducao(id, idOrigem, nome,</pre>
<pre class="alt">            endereco, dataCadastro, dataAtualizacao)</pre>
<pre><span class="kwrd">values</span> (<span class="kwrd">next</span> <span class="kwrd">value</span> <span class="kwrd">for</span> seq_Codigo, <span class="kwrd">convert</span>(<span class="kwrd">int</span>,rand()*100)+1,</pre>
<pre class="alt">    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,20),</pre>
<pre>    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,30),</pre>
<pre class="alt">    dateadd(<span class="kwrd">month</span>,-4, <span class="kwrd">convert</span>(datetime, getdate())), getdate())</pre>
<pre><span class="kwrd">go</span> 1000</pre>
<pre class="alt"></pre>
<pre><span class="kwrd">ALTER</span> <span class="kwrd">INDEX</span> idx_csi_tabelaProducao <span class="kwrd">ON</span> tabelaProducao REBUILD</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre></pre>
<pre class="alt">/**************************************************************************/</pre>
<pre>/****************************** <span class="kwrd">DROP</span> / <span class="kwrd">CREATE</span> *****************************/</pre>
<pre class="alt">/**************************************************************************/</pre>
<pre></pre>
<pre class="alt">/*******************************************/</pre>
<pre>/************ CRIAÇÃO DO <span class="kwrd">INDEX</span> *************/</pre>
<pre class="alt">/*******************************************/</pre>
<pre><span class="kwrd">CREATE</span> <span class="kwrd">NONCLUSTERED</span> COLUMNSTORE <span class="kwrd">INDEX</span> [idx_csi_tabelaProducao]</pre>
<pre class="alt"><span class="kwrd">ON</span> tabelaProducao ( id, nome, endereco, dataCadastro, dataAtualizacao )</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"></pre>
<pre>/*******************************************/</pre>
<pre class="alt">/******** INSERIR NA TABELA DE PROD ********/</pre>
<pre>/*******************************************/</pre>
<pre class="alt"></pre>
<pre>/* +1 em FEVEREIRO 2013 */</pre>
<pre class="alt"><span class="rem">-- Forçar o erro por causa que a tabela está com ColumnStore Index</span></pre>
<pre>insert <span class="kwrd">into</span> tabelaProducao(id, idOrigem, nome,</pre>
<pre class="alt">            endereco, dataCadastro, dataAtualizacao)</pre>
<pre><span class="kwrd">values</span> (<span class="kwrd">next</span> <span class="kwrd">value</span> <span class="kwrd">for</span> seq_Codigo, <span class="kwrd">convert</span>(<span class="kwrd">int</span>,rand()*100)+1,</pre>
<pre class="alt">    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,20),</pre>
<pre>    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,30),</pre>
<pre class="alt">    getdate(), getdate())</pre>
<pre></pre>
<pre class="alt">/*******************************************/</pre>
<pre>/************** <span class="kwrd">DROP</span> / <span class="kwrd">CREATE</span> **************/</pre>
<pre class="alt">/*******************************************/</pre>
<pre><span class="kwrd">DROP</span> <span class="kwrd">INDEX</span> [idx_csi_tabelaProducao] <span class="kwrd">ON</span> tabelaProducao</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre></pre>
<pre class="alt"><span class="kwrd">CREATE</span> <span class="kwrd">NONCLUSTERED</span> COLUMNSTORE <span class="kwrd">INDEX</span> [idx_csi_tabelaProducao]</pre>
<pre><span class="kwrd">ON</span> tabelaProducao ( id, nome, endereco, dataCadastro, dataAtualizacao )</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre></pre>
<pre class="alt">/*******************************************/</pre>
<pre>/************ POPULAR A TABELA *************/</pre>
<pre class="alt">/*******************************************/</pre>
<pre><span class="kwrd">DROP</span> <span class="kwrd">INDEX</span> [idx_csi_tabelaProducao] <span class="kwrd">ON</span> tabelaProducao</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre></pre>
<pre class="alt">insert <span class="kwrd">into</span> tabelaProducao(id, idOrigem, nome,</pre>
<pre>            endereco, dataCadastro, dataAtualizacao)</pre>
<pre class="alt"><span class="kwrd">values</span> (<span class="kwrd">next</span> <span class="kwrd">value</span> <span class="kwrd">for</span> seq_Codigo, <span class="kwrd">convert</span>(<span class="kwrd">int</span>,rand()*100)+1,</pre>
<pre>    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,20),</pre>
<pre class="alt">    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,30),</pre>
<pre>    dateadd(<span class="kwrd">month</span>,-4, <span class="kwrd">convert</span>(datetime, getdate())), getdate())</pre>
<pre class="alt"><span class="kwrd">go</span> 1000</pre>
<pre></pre>
<pre class="alt"><span class="kwrd">CREATE</span> <span class="kwrd">NONCLUSTERED</span> COLUMNSTORE <span class="kwrd">INDEX</span> [idx_csi_tabelaProducao]</pre>
<pre><span class="kwrd">ON</span> tabelaProducao ( id, nome, endereco, dataCadastro, dataAtualizacao )</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre></pre>
<pre class="alt">/**************************************************************************/</pre>
<pre>/***************************** PARTITION <span class="kwrd">TABLE</span> ****************************/</pre>
<pre class="alt">/**************************************************************************/</pre>
<pre></pre>
<pre class="alt">/*******************************************/</pre>
<pre>/********** CRIAÇÃO DAS PARTIÇÕES **********/</pre>
<pre class="alt">/*******************************************/</pre>
<pre></pre>
<pre class="alt"><span class="kwrd">CREATE</span> PARTITION <span class="kwrd">FUNCTION</span> [pf_DataAtualizacao](<span class="kwrd">date</span>) <span class="kwrd">AS</span> RANGE <span class="kwrd">RIGHT</span></pre>
<pre><span class="kwrd">FOR</span> <span class="kwrd">VALUES</span> (<span class="str">'2012-09-01'</span>,<span class="str">'2012-10-01'</span>,<span class="str">'2012-11-01'</span>,</pre>
<pre class="alt">            <span class="str">'2012-12-01'</span>,<span class="str">'2013-01-01'</span>,<span class="str">'2013-02-01'</span>,<span class="str">'2013-03-01'</span>)</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"></pre>
<pre><span class="kwrd">CREATE</span> PARTITION SCHEME [ps_DataAtualizacao]</pre>
<pre class="alt">    <span class="kwrd">AS</span> PARTITION [pf_DataAtualizacao] <span class="kwrd">ALL</span> <span class="kwrd">TO</span> ([<span class="kwrd">PRIMARY</span>])</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"></pre>
<pre>/*******************************************/</pre>
<pre class="alt">/************ CRIAÇÃO DOS <span class="kwrd">INDEX</span> ************/</pre>
<pre>/*******************************************/</pre>
<pre class="alt"></pre>
<pre><span class="kwrd">CREATE</span> <span class="kwrd">CLUSTERED</span> <span class="kwrd">INDEX</span> [idx_DataCodigo] <span class="kwrd">ON</span> tabelaProducao(DataAtualizacao)</pre>
<pre class="alt"><span class="kwrd">ON</span> ps_DataAtualizacao(dataAtualizacao)</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"></pre>
<pre><span class="kwrd">CREATE</span> <span class="kwrd">NONCLUSTERED</span> COLUMNSTORE <span class="kwrd">INDEX</span> [idx_csi_tabelaProducao]</pre>
<pre class="alt"><span class="kwrd">ON</span> tabelaProducao ( id, nome, endereco, dataCadastro, dataAtualizacao )</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"></pre>
<pre>/*******************************************/</pre>
<pre class="alt">/******** INSERIR NA TABELA DE PROD ********/</pre>
<pre>/*******************************************/</pre>
<pre class="alt"></pre>
<pre>/* +1 em FEVEREIRO 2013 */</pre>
<pre class="alt"><span class="rem">-- Forçar o erro por causa que a tabela está com ColumnStore Index</span></pre>
<pre>insert <span class="kwrd">into</span> tabelaProducao(id, idOrigem, nome,</pre>
<pre class="alt">            endereco, dataCadastro, dataAtualizacao)</pre>
<pre><span class="kwrd">values</span> (<span class="kwrd">next</span> <span class="kwrd">value</span> <span class="kwrd">for</span> seq_Codigo, <span class="kwrd">convert</span>(<span class="kwrd">int</span>,rand()*100)+1,</pre>
<pre class="alt">    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,20),</pre>
<pre>    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,30),</pre>
<pre class="alt">    getdate(), getdate())</pre>
<pre></pre>
<pre class="alt">/*******************************************/</pre>
<pre>/******** CRIAÇÃO DA SEGUNDA TABELA ********/</pre>
<pre class="alt">/*******************************************/</pre>
<pre></pre>
<pre class="alt"><span class="kwrd">CREATE</span> <span class="kwrd">TABLE</span> tabelaProducao_V2 (id <span class="kwrd">INT</span> <span class="kwrd">NOT</span> <span class="kwrd">NULL</span>, idOrigem <span class="kwrd">int</span> <span class="kwrd">NOT</span> <span class="kwrd">NULL</span>,</pre>
<pre>    nome <span class="kwrd">VARCHAR</span>(20) <span class="kwrd">NOT</span> <span class="kwrd">NULL</span>, endereco <span class="kwrd">VARCHAR</span>(30) <span class="kwrd">NOT</span> <span class="kwrd">NULL</span>,</pre>
<pre class="alt">    dataCadastro <span class="kwrd">date</span> <span class="kwrd">NOT</span> <span class="kwrd">NULL</span>, dataAtualizacao <span class="kwrd">date</span> <span class="kwrd">NOT</span> <span class="kwrd">NULL</span>)</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"></pre>
<pre><span class="kwrd">ALTER</span> <span class="kwrd">TABLE</span> tabelaProducao_V2 <span class="kwrd">WITH</span> <span class="kwrd">CHECK</span> <span class="kwrd">ADD</span></pre>
<pre class="alt">    <span class="kwrd">CONSTRAINT</span>[validarCodigo_V2_Check] <span class="kwrd">CHECK</span></pre>
<pre>    (dataAtualizacao &gt;= <span class="str">'2013-02-01'</span> <span class="kwrd">and</span> dataAtualizacao &lt; <span class="str">'2013-03-01'</span>)</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre></pre>
<pre class="alt">/*******************************************/</pre>
<pre>/************ CRIAÇÃO DOS <span class="kwrd">INDEX</span> ************/</pre>
<pre class="alt">/*******************************************/</pre>
<pre></pre>
<pre class="alt"><span class="kwrd">CREATE</span> <span class="kwrd">CLUSTERED</span> <span class="kwrd">INDEX</span> [idx_DataCodigo]</pre>
<pre><span class="kwrd">ON</span> tabelaProducao_v2(DataAtualizacao) <span class="kwrd">ON</span> [<span class="kwrd">PRIMARY</span>]</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre></pre>
<pre class="alt">/*******************************************/</pre>
<pre>/********* MOVIMENTAÇÃO DOS DADOS **********/</pre>
<pre class="alt">/*******************************************/</pre>
<pre><span class="rem">-- Conta os registros</span></pre>
<pre class="alt"><span class="kwrd">SELECT</span> <span class="kwrd">COUNT</span>(0) [TOTAL], <span class="kwrd">min</span>(dataAtualizacao) [MENOR],</pre>
<pre>        <span class="kwrd">max</span>(dataAtualizacao) [MAIOR] <span class="kwrd">FROM</span>  tabelaProducao</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre><span class="kwrd">SELECT</span> <span class="kwrd">COUNT</span>(0) [TOTAL], <span class="kwrd">min</span>(dataAtualizacao) [MENOR],</pre>
<pre class="alt">        <span class="kwrd">max</span>(dataAtualizacao) [MAIOR] <span class="kwrd">FROM</span>  tabelaProducao_v2</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"></pre>
<pre><span class="rem">-- Movimenta os dados</span></pre>
<pre class="alt"><span class="kwrd">ALTER</span> <span class="kwrd">TABLE</span> tabelaProducao SWITCH PARTITION 7 <span class="kwrd">TO</span> tabelaProducao_v2</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"></pre>
<pre><span class="rem">-- Conta os registros</span></pre>
<pre class="alt"><span class="kwrd">SELECT</span> <span class="kwrd">COUNT</span>(0) [TOTAL], <span class="kwrd">min</span>(dataAtualizacao) [MENOR],</pre>
<pre>        <span class="kwrd">max</span>(dataAtualizacao) [MAIOR] <span class="kwrd">FROM</span>  tabelaProducao</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre><span class="kwrd">SELECT</span> <span class="kwrd">COUNT</span>(0) [TOTAL], <span class="kwrd">min</span>(dataAtualizacao) [MENOR],</pre>
<pre class="alt">        <span class="kwrd">max</span>(dataAtualizacao) [MAIOR] <span class="kwrd">FROM</span>  tabelaProducao_v2</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"></pre>
<pre>/* Fevereiro na TABELA 2 */</pre>
<pre class="alt">insert <span class="kwrd">into</span> tabelaProducao_V2(id, idOrigem, nome,</pre>
<pre>            endereco, dataCadastro, dataAtualizacao)</pre>
<pre class="alt"><span class="kwrd">values</span> (<span class="kwrd">next</span> <span class="kwrd">value</span> <span class="kwrd">for</span> seq_Codigo, <span class="kwrd">convert</span>(<span class="kwrd">int</span>,rand()*100)+1,</pre>
<pre>    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,20),</pre>
<pre class="alt">    <span class="kwrd">substring</span>(<span class="kwrd">convert</span>(<span class="kwrd">varchar</span>(40),newid()),1,30),</pre>
<pre>    getdate(), getdate())</pre>
<pre class="alt"><span class="kwrd">go</span> 10</pre>
<pre></pre>
<pre class="alt"><span class="rem">-- Conta os registros</span></pre>
<pre><span class="kwrd">SELECT</span> <span class="kwrd">COUNT</span>(0) [TOTAL], <span class="kwrd">min</span>(dataAtualizacao) [MENOR],</pre>
<pre class="alt">        <span class="kwrd">max</span>(dataAtualizacao) [MAIOR] <span class="kwrd">FROM</span>  tabelaProducao</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"><span class="kwrd">SELECT</span> <span class="kwrd">COUNT</span>(0) [TOTAL], <span class="kwrd">min</span>(dataAtualizacao) [MENOR],</pre>
<pre>        <span class="kwrd">max</span>(dataAtualizacao) [MAIOR] <span class="kwrd">FROM</span>  tabelaProducao_v2</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre></pre>
<pre class="alt"><span class="kwrd">CREATE</span> <span class="kwrd">NONCLUSTERED</span> COLUMNSTORE <span class="kwrd">INDEX</span> [idx_csi_tabelaProducao]</pre>
<pre><span class="kwrd">ON</span> tabelaProducao_v2 ( id, nome, endereco, dataCadastro, dataAtualizacao )</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre></pre>
<pre class="alt"><span class="kwrd">ALTER</span> <span class="kwrd">TABLE</span> tabelaProducao_V2 switch <span class="kwrd">to</span> tabelaProducao partition 7</pre>
<pre><span class="kwrd">GO</span></pre>
<pre class="alt"></pre>
<pre><span class="rem">-- Conta os registros</span></pre>
<pre class="alt"><span class="kwrd">SELECT</span> <span class="kwrd">COUNT</span>(0) [TOTAL], <span class="kwrd">min</span>(dataAtualizacao) [MENOR],</pre>
<pre>        <span class="kwrd">max</span>(dataAtualizacao) [MAIOR] <span class="kwrd">FROM</span>  tabelaProducao</pre>
<pre class="alt"><span class="kwrd">GO</span></pre>
<pre><span class="kwrd">SELECT</span> <span class="kwrd">COUNT</span>(0) [TOTAL], <span class="kwrd">min</span>(dataAtualizacao) [MENOR],</pre>
<pre class="alt">        <span class="kwrd">max</span>(dataAtualizacao) [MAIOR] <span class="kwrd">FROM</span>  tabelaProducao_v2</pre>
<pre>GO</pre>
</div>
<div class="csharpcode"></div>
<div class="csharpcode"></div>
<p>Bom divertimento em seus testes. Espero ver nos comentários sua conclusão sobre este comparativo.</p>
<p>O post <a href="https://diegonogare.net/2013/02/comparativo-de-insero-de-dados-em-uma-tabela-com-columnstore-index/">Comparativo de inserção de dados em uma tabela com ColumnStore Index</a> apareceu primeiro em <a href="https://diegonogare.net">Diego Nogare</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2121</post-id>	</item>
	</channel>
</rss>
