/*================================================================================== Curso: SQL SERVER 2019 Para ter acesso ao curso completo: https://www.udemy.com/course/draft/3957796/?referralCode=FB10D369E786D9FE8A48 Instrutor: Sandro Servino https://www.linkedin.com/in/sandroservino/?originalSubdomain=pt https://filiado.wixsite.com/sandroservino ATIVIDADES ROTINEIRAS BÁSICAS DO DBA PERFORMANCE: BATALHA DOS INDICES - Análise da Performance do ColumnStore Index sobre o Compress Index (page and row), Indices sem compress e DELAYED_DURABILITY. AULA: 199. Total de estudo até aqui 60 horas e 30 minutos de aulas. ColumnStore Index: - Cada coluna de uma tabela é armazenado em uma estrutura fisica separada (alta compressao). - De acordo com a documentação oficial do Microsoft SQL Server, índice columnstore é o padrão para armazenar e para consultar grandes tabelas de fatos em repositório de dados. - Um columnstore index é uma tecnologia para armazenamento, recuperação e gerenciamento de dados usando um formato de dados colunar, chamado columnstore. - Performance de consulta até 10 vezes melhor no data warehouse em relação ao armazenamento por linha e até 10 vezes mais compactação de dados (tabelas fato). - Vantagem em tabelas grande como por exemplo de mais de 200 milhô0es de linhas que sao usadas para reports complexos com agrupamentos e processos matematicos, no meu ponto de vista e trabalhos realizados. - Muitas pessoas entendem que podem utilizar em bases oltp, será? Vamos fazer um LAB, simulando algumas operações muito usadas. ==================================================================================*/ -- Vamos ao LAB. Vamos criar 5 tabelas, sem indices nonclustered, com indices nonclustered -- sem compactacao, indices nonclustered compactadas por row e page e -- indices clustered columnstore Use auditoriadba Go drop table if exists NOindex go create Table NOindex (Registro Bigint Identity(1,1), Numero BigInt, nomecliente nvarchar(100), endereco nchar(200), cidade nchar(30), estado nchar(30), pais nchar(20) Index idx_NONONclusterednumero Clustered (Numero)) Go drop table if exists NOCompress go create Table NOCompress (Registro Bigint Identity(1,1), Numero BigInt, nomecliente nvarchar(100), endereco nchar(200), cidade nchar(30), estado nchar(30), pais nchar(20) Index idx_NOCompressnumero Clustered (Numero)) Go drop table if exists CompressRow go create Table CompressRow (Registro Bigint Identity(1,1), Numero BigInt, nomecliente nvarchar(100), endereco nchar(200), cidade nchar(30), estado nchar(30), pais nchar(20) Index idx_compressnumero Clustered (Numero)) WITH (DATA_COMPRESSION = ROW) Go drop table if exists CompressPage go create Table CompressPage (Registro Bigint Identity(1,1), Numero BigInt, nomecliente nvarchar(100), endereco nchar(200), cidade nchar(30), estado nchar(30), pais nchar(20) Index idx_compresspagina Clustered (Numero)) WITH (DATA_COMPRESSION = PAGE) Go drop table if exists CompressColumnStore go create Table CompressColumnStore (Registro Bigint Identity(1,1), numero BigInt, nomecliente nvarchar(100), endereco nchar(200), cidade nchar(30), estado nchar(30), pais nchar(20), INDEX Idx_CompressaoColumnStore Clustered ColumnStore) Go ---------------------------------------------------------------------------------------- -- Vamos agora criar alguns indices nonclustered compactados com diferentes tecnologias -- e nao compactado. -- NOCompress, nos campos registro e cidade use auditoriadba go CREATE NONCLUSTERED INDEX idx_NOcompressrowRegistro ON NOCompress(registro) WITH ( FILLFACTOR = 100, SORT_IN_TEMPDB = OFF, ONLINE = ON ) GO CREATE NONCLUSTERED INDEX idx_NOcompressrowCidade ON NOCompress(cidade) WITH ( FILLFACTOR = 100, SORT_IN_TEMPDB = OFF, ONLINE = ON ) GO -- CompressRow, nos campos registro e cidade use auditoriadba go CREATE NONCLUSTERED INDEX idx_compressrowRegistro ON CompressRow(registro) WITH ( FILLFACTOR = 100, SORT_IN_TEMPDB = OFF, ONLINE = ON, DATA_COMPRESSION = ROW ) GO CREATE NONCLUSTERED INDEX idx_compressrowCidade ON CompressRow(cidade) WITH ( FILLFACTOR = 100, SORT_IN_TEMPDB = OFF, ONLINE = ON, DATA_COMPRESSION = ROW ) GO -- CompressPage, nos campos registro e cidade CREATE NONCLUSTERED INDEX idx_compresspageRegistro ON CompressPage(registro) WITH ( FILLFACTOR = 100, SORT_IN_TEMPDB = OFF, ONLINE = ON, DATA_COMPRESSION = PAGE ) GO CREATE NONCLUSTERED INDEX idx_compresspageCidade ON CompressPage(cidade) WITH ( FILLFACTOR = 100, SORT_IN_TEMPDB = OFF, ONLINE = ON, DATA_COMPRESSION = PAGE ) GO -- CompressColumnStore, nos campos registro e cidade CREATE NONCLUSTERED COLUMNSTORE INDEX idx_compressCOLUMNSTORERegistro ON CompressColumnStore(registro) WITH (ONLINE = ON, DATA_COMPRESSION = COLUMNSTORE) GO CREATE NONCLUSTERED COLUMNSTORE INDEX idx_compressCOLUMNSTORECidade ON CompressColumnStore(cidade) WITH (ONLINE = ON, DATA_COMPRESSION = COLUMNSTORE) GO -- AQUI RECEBERA UM ERROR, Multiple columnstore indexes are not supported. -- Nao pode criar na mesma tabela indice COLUMNSTORE CLUSTERED E NONCLUSTERED -- e já existe um indice COLUMNSTORE CLUSTERED nesta tabela. -- Em um indice COLUMNSTORE CLUSTERED ja tem todas as colunas e ai não -- precisaria criar outro indice COLUMNSTORE NONCLUSTERED e a ordem dos -- campos nao importa no indice. -- Poderia criar um indice COLUMNSTORE NONCLUSTERED com campos especificos. ------------------------------------------------------------------------------------ -- Vamos verificar os indices criados SELECT A.[partition_id], A.[object_id], object_name(A.[object_id]) AS [object_name], data_compression_desc FROM sys.partitions A join sys.objects B on A.[object_id] = B.[object_id] WHERE B.is_ms_shipped = 0 GO ------------------------------------------------------------------------------------ -- Vamos RODAR e marcar o tempo para inserts, mas antes vamos limpar o arquivo de log. -- Execute os 3 INSERTs em paralelo e veja-os rodando ao mesmo tempo com -- sp_whoisactive. Veja se estão ocorrendo waits, tipo WRITELOG. -- NOINDEX BACKUP DATABASE auditoriadba TO DISK = N'nul' go Checkpoint go SET NOCOUNT ON SET STATISTICS IO, TIME ON -- Vamos fazer inserts nas 3 tabelas e marcar o tempo -- Vamos inserir 1M linhas na tabela NOIndex Declare @Cont Int = 1 While @Cont <=333333 Begin Insert Into NOIndex (Numero,nomecliente,endereco, cidade, estado, pais ) Values (Rand()*100000000000,'Pedro','rua teste 123','vitoria','espirito santo','brasil') Insert Into NOIndex (Numero,nomecliente,endereco, cidade, estado, pais) Values (Rand()*100000000000,'maria','rua teste 789','vila nova de gaia','porto','portugal') Insert Into NOIndex (Numero,nomecliente,endereco, cidade, estado, pais ) Values (Rand()*100000000000,'jose','rua teste 456','rio de janeiro','rio de janeiro','brasil') Set @Cont +=1 End Go -- TEMPO TOTAL DE INSERT EM 1 HORA E 27 MINUTOS E 42 SEGUNDOS ----------------------------------------------------------------------------------------------------------- -- Agora vamos mudar a opcao padrao do banco de dados para ganharmos performance na inclusao -- usando a opcao COMMIT WITH (DELAYED_DURABILITY = ON) em um bloco de comandos especificados -- e altere toda a configuracao do banco para ALTER DATABASE AUDITORIADBA SET DELAYED_DURABILITY = {ALLOWED} -- mudando o padrao de disabled para Allowed. -- O que faz e quais os riscos? https://docs.microsoft.com/en-us/sql/relational-databases/logs/control-transaction-durability?view=sql-server-ver15#CompiledProcControl TRUNCATE TABLE NOIndex go BACKUP DATABASE auditoriadba TO DISK = N'nul' go Checkpoint go SET NOCOUNT ON -- sp_whoisactive. Veja se estão ocorrendo waits, tipo WRITELOG. Declare @Cont Int = 1 While @Cont <=333333 Begin BEGIN TRAN Insert Into NOIndex (Numero,nomecliente,endereco, cidade, estado, pais ) Values (Rand()*100000000000,'Pedro','rua teste 123','vitoria','espirito santo','brasil') Insert Into NOIndex (Numero,nomecliente,endereco, cidade, estado, pais) Values (Rand()*100000000000,'maria','rua teste 789','vila nova de gaia','porto','portugal') Insert Into NOIndex (Numero,nomecliente,endereco, cidade, estado, pais ) Values (Rand()*100000000000,'jose','rua teste 456','rio de janeiro','rio de janeiro','brasil') COMMIT WITH (DELAYED_DURABILITY = ON) Set @Cont +=1 End Go -- TEMPO TOTAL DE INSERT EM 1 HORA E 00 MINUTOS E 33 SEGUNDOS ------------------------------------------------------------------------------------------------------------ -- Vamos agora criar os dois indices nonclustered nesta tabela use auditoriadba go CREATE NONCLUSTERED INDEX idx_Registro ON NOIndex(registro) WITH ( FILLFACTOR = 100, SORT_IN_TEMPDB = OFF, ONLINE = ON ) GO CREATE NONCLUSTERED INDEX idx_Cidade ON NOIndex(cidade) WITH ( FILLFACTOR = 100, SORT_IN_TEMPDB = OFF, ONLINE = ON ) GO -- TEMPO CRIACAO INDEX Segundos -- TEMPO TOTAL DE INSERT EM 1 HORA E 1 MINUTOS E 00 SEGUNDOS -- COM DELAYED_DURABILITY O TEMPO DE INSERT CAIU DE QUASE HORAS PARA HORA E MINUTOS. -- O tempo poderia ter sido menor ainda com a utilizacao da opcao with (tablock) para minimizar a geracao de log ou bulkcopy -- para grandes inserts, como por exemplo, carregamento de bases DW ou Datamarts. -------------------------------------------------------------------------------------------- -- NOCOMPRESS BACKUP DATABASE auditoriadba TO DISK = N'nul' go Checkpoint go SET NOCOUNT ON -- Vamos fazer inserts nas 3 tabelas e marcar o tempo -- Vamos inserir 1M linhas na tabela NOCompress Declare @Cont Int = 1 While @Cont <=333333 Begin Insert Into NOCompress (Numero,nomecliente,endereco, cidade, estado, pais ) Values (Rand()*100000000000,'Pedro','rua teste 123','vitoria','espirito santo','brasil') Insert Into NOCompress (Numero,nomecliente,endereco, cidade, estado, pais) Values (Rand()*100000000000,'maria','rua teste 789','vila nova de gaia','porto','portugal') Insert Into NOCompress (Numero,nomecliente,endereco, cidade, estado, pais ) Values (Rand()*100000000000,'jose','rua teste 456','rio de janeiro','rio de janeiro','brasil') Set @Cont +=1 End Go -- TEMPO TOTAL DE INSERT EM 2 HORA E 21 MINUTOS E 50 SEGUNDOS ------------------------------------------------------------------------------------------------- --COMPRESSROW BACKUP DATABASE auditoriadba TO DISK = N'nul' go Checkpoint go SET NOCOUNT ON -- Vamos fazer inserts nas 3 tabelas e marcar o tempo -- Vamos inserir 1M linhas na tabela CompressRow Declare @Cont Int = 1 While @Cont <=333333 Begin Insert Into CompressRow (Numero,nomecliente,endereco, cidade, estado, pais ) Values (Rand()*100000000000,'Pedro','rua teste 123','vitoria','espirito santo','brasil') Insert Into CompressRow (Numero,nomecliente,endereco, cidade, estado, pais) Values (Rand()*100000000000,'maria','rua teste 789','vila nova de gaia','porto','portugal') Insert Into CompressRow (Numero,nomecliente,endereco, cidade, estado, pais ) Values (Rand()*100000000000,'jose','rua teste 456','rio de janeiro','rio de janeiro','brasil') Set @Cont +=1 End Go -- TEMPO TOTAL DE INSERT EM HORA E MINUTOS E SEGUNDOS ------------------------------------------------------------------------------------------------- --COMPRESSPAGE -- Vamos fazer inserts nas 3 tabelas e marcar o tempo -- Vamos inserir 1M linhas na tabela CompressPAGE -- Vamos RODAR e marcar o tempo para inserts, mas antes vamos limpar o arquivo de log BACKUP DATABASE auditoriadba TO DISK = N'nul' go Checkpoint go SET NOCOUNT ON Declare @Cont Int = 1 While @Cont <=333333 Begin Insert Into CompressPage (Numero,nomecliente,endereco, cidade, estado, pais ) Values (Rand()*100000000000,'Pedro','rua teste 123','vitoria','espirito santo','brasil' ) Insert Into CompressPage (Numero,nomecliente,endereco, cidade, estado, pais ) Values (Rand()*100000000000,'maria','rua teste 789','vila nova de gaia','porto','portugal' ) Insert Into CompressPage (Numero,nomecliente,endereco, cidade, estado, pais) Values (Rand()*10000000000000,'jose','rua teste 456','rio de janeiro','rio de janeiro','brasil') Set @Cont +=1 End Go -- TEMPO TOTAL DE INSERT DE 52 MINUTOS E 04 SEGUNDOS ------------------------------------------------------------------------------------------------- --COMPRESSCOLUMNSTORE -- Vamos fazer inserts nas 3 tabelas e marcar o tempo -- Vamos inserir 1M linhas na tabela CompressColumnStore -- Vamos RODAR e marcar o tempo para inserts, mas antes vamos limpar o arquivo de log -- ANTES DE INSERIR, PRECISAMOS CRIAR DOIS INDICES POR CIDADE E REGISTRO, -- MAS NAO POSSO SER NONCLUSTERED COLUMNSTORE POR JA EXISTE UM INDICE -- CLUSTERED COLUMNSTORE NA MESMA TABELA, E NAO PODEMOS CRIAR COM -- PARAMETRO ONLINE ATIVO QUE O SQL SERVER NAO DEIXA. -- Vamos criar estes dois indices para termos o mesmo grau de comparabilidade -- e podermos realizar busca com operador do tipo seek, senao o SQL SERVER só irá -- realziar a busca com cluster columnstore scan CREATE NONCLUSTERED INDEX idx_compresscolumnstoreRegistro ON CompressColumnStore(registro) WITH ( FILLFACTOR = 100, SORT_IN_TEMPDB = OFF, DATA_COMPRESSION = PAGE ) GO CREATE NONCLUSTERED INDEX idx_compresspageCompressColumnStoreCidade ON CompressColumnStore(cidade) WITH ( FILLFACTOR = 100, SORT_IN_TEMPDB = OFF, DATA_COMPRESSION = PAGE ) GO BACKUP DATABASE auditoriadba TO DISK = N'nul' go Checkpoint go SET NOCOUNT ON Declare @Cont Int = 1 While @Cont <=333333 Begin Insert Into CompressColumnStore (Numero,nomecliente,endereco, cidade, estado, pais ) Values (Rand()*100000000000,'Pedro','rua teste 123','vitoria','espirito santo','brasil' ) Insert Into CompressColumnStore (Numero,nomecliente,endereco, cidade, estado, pais ) Values (Rand()*100000000000,'maria','rua teste 789','vila nova de gaia','porto','portugal') Insert Into CompressColumnStore (Numero,nomecliente,endereco, cidade, estado, pais) Values (Rand()*100000000000,'jose','rua teste 456','rio de janeiro','rio de janeiro','brasil' ) Set @Cont +=1 End Go -- TEMPO TOTAL DE INSERT DE 12 MINUTOS E 43 SEGUNDOS SET NOCOUNT OFF ---------------------------------------------------------------------------------------------------- -- Agora vamos verificar os tamanhos SP_SpaceUsed NOIndex go -- Dados : 905.192 KB -- Indice: 130.368 KB SP_SpaceUsed NOCompress go -- Dados : 904.264 KB -- Indice: 171.064 KB SP_SpaceUsed CompressRow go -- Dados : 127.464 KB -- Indice: 61.392 KB SP_SpaceUsed CompressPage go -- Dados : 45.936 KB -- Indice: 62.464 KB SP_SpaceUsed CompressColumnStore go -- Dados : 666.688 KB -- Indice: 48.112 KB -- Melhor performance em termos de tempo de execucao> COMPRESSCOLUMNSTORE +1 -- Maior compactação de dados e menor custo de armazenamento> COMPRESSPAGE +1 ---------------------------------------------------------------------------------------------------- -- Agora vamos fazer umas buscas pelos indices criados set statistics time, io on DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE -- NOCOMPRESS Select cidade, numero, registro, count(*),sum(registro),min(registro), max(registro), avg(registro), sum(numero), min(numero),max(numero), avg(numero) from NOCompress group by cidade, numero, registro order by cidade, numero, registro option (recompile) Go -- TEMPO TOTAL DE SELECT EM 1 MINUTOS E 47 SEGUNDOS -- Numero de paginas de dados lidas: 115.050 -- CPU TIME: 28547 ms -------------------------------------------------- -- COMPRESSROW DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE Select cidade, numero, registro, count(*),sum(registro),min(registro), max(registro), avg(registro), sum(numero), min(numero),max(numero), avg(numero) from CompressRow group by cidade, numero, registro order by cidade, numero, registro option (recompile) Go -- TEMPO TOTAL DE SELECT EM 0 DE MINUTOS E 44 SEGUNDOS -- Numero de paginas de dados lidas: 16.557 -- CPU TIME: 26377 ms -------------------------------------------------- -- COMPRESSPAGE DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE Select cidade, numero, registro, count(*),sum(registro),min(registro), max(registro), avg(registro), sum(numero), min(numero),max(numero), avg(numero) from CompressPage group by cidade, numero, registro order by cidade, numero, registro option (recompile) Go -- TEMPO TOTAL DE SELECT EM 0 MINUTOS E 39 SEGUNDOS -- Numero de paginas de dados lidas: 5887 -- CPU TIME:26.453 ms ------------------------------------------------- -- COMPRESSCOLUMNSTORE DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE Select cidade, numero, registro, count(*),sum(registro),min(registro), max(registro), avg(registro), sum(numero), min(numero),max(numero), avg(numero) from CompressColumnStore group by cidade, numero, registro order by cidade, numero, registro option (recompile) Go -- TEMPO TOTAL DE SELECT EM 0 MINUTOS E 53 SEGUNDOS -- Numero de paginas de dados lidas: 83.644 -- CPU TIME: 31.468 ms ------------------------------------------------------------------------------------------------------------------------------------------------- -- Vamos agora fazer testes com update e deletes a marcar o tempo -- UPDATES -- NOCOMPRESS -- Vamos ALTERAR 1M linhas na tabela NOCompress use auditoriadba go SET NOCOUNT ON set statistics io, time on DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE update NOCompress set cidade ='serra' where cidade ='vitoria' option (recompile) Go update NOCompress set cidade ='lisboa' where cidade ='vila nova de gaia' option (recompile) Go update NOCompress set cidade ='niteroi' where cidade ='rio de janeiro' option (recompile) Go -- TEMPO TOTAL DE UPDATE EM 25 MINUTOS E 34 SEGUNDOS -- Numero de paginas de dados lidas: 3.182.094, 2.878.515, 2.876.890 ----------------------------------------------------------------- -- COMPRESSROW -- Vamos ALTERAR 1M linhas na tabela CompressRow use auditoriadba go SET NOCOUNT ON DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE update CompressRow set cidade ='serra' where cidade ='vitoria' option (recompile) Go update CompressRow set cidade ='lisboa' where cidade ='vila nova de gaia' option (recompile) Go update CompressRow set cidade ='niteroi' where cidade ='rio de janeiro' option (recompile) Go -- TEMPO TOTAL DE UPDATE EM 4 MINUTOS E 27 SEGUNDOS -- Numero de paginas de dados lidas: 2.219.134, 2.141.334, 2.139.167 ----------------------------------------------------------------- -- COMPRESSPAGE -- Vamos ALTERAR 1M linhas na tabela Compresspage DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE update CompressPage set cidade ='guarapari' where cidade ='vitoria' option (recompile) Go update CompressPage set cidade ='cintra' where cidade ='vila nova de gaia' option (recompile) Go update CompressPage set cidade ='itaparica' where cidade ='rio de janeiro' option (recompile) Go -- TEMPO TOTAL DE UPDATE EM 3 MINUTOS E 1 SEGUNDOS -- Numero de paginas de dados lidas:2.159.470, 2.129.111,2.126.117 ----------------------------------------------------------------- -- COMPRESSCOLUMNSTORE -- Vamos ALTERAR 1M linhas na tabela CompressColumnStore -- apenas com indice clustered CompressColumnStore DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE update CompressColumnStore set cidade ='Viana' where cidade ='vitoria' option (recompile) Go update CompressColumnStore set cidade ='Faro' where cidade ='vila nova de gaia' option (recompile) Go update CompressColumnStore set cidade ='Maua' where cidade ='Rio de Janeiro' option (recompile) Go -- TEMPO TOTAL DE UPDATE EM 8 MINUTOS E 13 SEGUNDOS -- Numero de paginas de dados lidas:4.324.882,2.016.825,4.334.304, 4.334.304, 4.361.377, 2.016.825 ----------------------------------------------------------------- -- DELETE -- NOCOMPRESS -- Vamos DELETAR 1M linhas na tabela NOCompress use auditoriadba go SET NOCOUNT ON SET STATISTICS IO, TIME ON DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE delete from NOCompress where cidade ='rio de janeiro' or cidade ='vitoria' or cidade ='vila nova de gaia' option (recompile) Go -- TEMPO TOTAL DE DELETE EM 0 MINUTOS E 11 SEGUNDOS -- Numero de paginas de dados lidas: ----------------------------------------------------------------- -- COMPRESSROW -- Vamos DELETAR 1M linhas na tabela CompressRow use auditoriadba go SET NOCOUNT ON DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE select COUNT(*) from CompressRow go delete from CompressRow where cidade ='rio de janeiro' or cidade ='vitoria' or cidade = 'vila nova de gaia' option (recompile) Go -- TEMPO TOTAL DE DELETE EM 0 MINUTOS E 2 SEGUNDOS -- Numero de paginas de dados lidas: ----------------------------------------------------------------- -- COMPRESSPAGE -- Vamos DELETAR 1M mil linhas na tabela Compresspage DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE select COUNT(*) from CompressPage go delete from CompressPage where cidade ='vila nova de gaia' or cidade ='vitoria' or cidade ='rio de janeiro' option (recompile) Go -- TEMPO TOTAL DE DELETE EM 0 MINUTOS E 2 SEGUNDOS -- Numero de paginas de dados lidas: ----------------------------------------------------------------- -- COMPRESSCOLUMNSTORE -- Vamos DELETAR 1M linhas na tabela CompressColumnStore DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE select * from CompressColumnStore go delete from CompressColumnStore where cidade ='maua' or cidade ='Viana' or cidade ='Faro' option (recompile) Go -- TEMPO TOTAL DE DELETE EM 5 MINUTOS E 0 SEGUNDOS -- Numero de paginas de dados lidas: SET NOCOUNT OFF -------------------------------------------------------------------------------------------------------------- /* CONCLUSOES: PARA A AMOSTRAGEM DOS DADOS E OPERACOESS REALIZADAS: DO MELHOR PARA O PIORES TECNOLOGIAS DE INDICES, CONSIDERANDO PERFORMANCE E ARMAZENAMENTO INSERT -- Melhor performance em termos de tempo de execucao> COMPRESSCOLUMNSTORE +1 PONTO -- Maior compactação de dados e menor custo de armazenamento> COMPRESSPAGE +1 PONTO CONSULTA -- Maior performance em termos de menor tempo e menor qt de dados lido> COMPRESSPAGE +1 PONTO UPDATE -- Maior performance em termos de menor tempo e menor qt de dados lido> COMPRESSPAGE +1 PONTO DELETE -- Maior performance em termos de menor tempo e menor qt de dados lido> COMPRESSPAGE +1 PONTO -- Maior performance em termos de menor tempo e menor qt de dados lido> COMPRESSROW +1 PONTO -- compresspage 4 -- compressrow 1 -- COLUMNSTORE 1 -- NoCompress 0 */