Categorias
dicas sql server

Melhorando o desempenho de consultas (SELECT) em tabelas grandes no SQL SERVER

“Tenho uma tabela com mais de um milh??o de registros. Fa??o uma consulta… um simples SELECT… mas est?? demorando muito para retornar. O que fazer?”

Essa ?? a pergunta que voc?? se faz nessa situa????o. Todo programador sabe trabalhar com banco, mas nem sempre sabemos utilizar da melhor forma. Um DBA j?? ?? craque na situa????o e sabe a melhor forma de melhorar o desempenho de uma consulta. A dica do dia ??: ??ndices! Se voc?? n??o sabe o que s??o ??ndices, veja essa mat??ria aqui de Thiago Pastorello que explica de forma bem compreensiva. Tamb??m recomendo que leia tamb??m esse artigo da Compute-rs onde explica as vantagens e desvantagens de usar ??ndices.

?? s?? isso? Talvez. Se voc?? entedeu o significado de ??ndices lendo os dois artigos (refer??ncia) e fez o que irei demonstrar abaixo pode ser que resolva. Na net voc?? ir?? encontrar outros artigos semelhantes que ir??o mostrar outros caminhos que podem ajudar melhor. Aqui ser?? de forma simplificada… Vamos?

Abra o Microsoft SQL Server Management Studio, conecte-se a base de dados e clique em New Query. Escreva a consulta que deseja avaliar e corrigir para ficar mais r??pida. No meu caso irei executar uma Stored Procedure que cont??m v??rias sub-consultas com manipula????o de agrupamento tais como COUNT, SUM, etc. Na barra de ferramentas marque a op????o Include Actual Execution Plan (Incluir Plano de Execu????o Atual).

Agora clique em Execute ou pressione F5 para executar a query e avali??-la. Aguarde at?? que finalize completamente. V?? na ??ltima aba abaixo de Plano de Execu????o e veja os resultados.

Passando o mouse por cima de cada item ir?? ser exibidos detalhes acerca do custo de processamento. Depois procurem ai no Google mais explica????es sobre cada item. Mas vamos nos atrelar a essa mensagem verde. Note que o pr??prio SQL Server informa que h?? indices ausentes! Vamos cri??-los?

Clique com o direito sobre a mensagem e escolha Detalhes de ??ndices Ausentes.

Ao clicar, ir?? aparecer outra tela com um query de cria????o do ??ndice, exemplo:

/*
Detalhes de ??ndice Ausentes de SQLQuery1.sql – SERVIDOR.Mailing (thiago (53))
O Processador de Consultas estima que a implementa????o do ??ndice a seguir pode melhorar o custo da consulta em 99.7047%.
*/
/*
USE [Mailing]
GO
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[News_Envio] ([id_campanha])
GO
*/
 
A consulta de cria????o est?? praticamente pronta bastanto apenas dar um nome para o ??ndice e remover o coment??rio, deixando da seguinte forma:
 
USE [Mailing]
GO
CREATE NONCLUSTERED INDEX PI_Index_Envio_Campanha
ON [dbo].[News_Envio] ([id_campanha])
GO

Pressione F5 ou Execute esse bloco de instru????es para criar o ??ndice. Antes de testarmos, vamos atualizar os ??ndices e suas estat??sticas.

V?? na tabela desejada, na op????o de ??ndices e escolha Reorganizar ??ndices. Veja o n??vel de fragmenta????o e d?? OK. Em seguida execute:

UPDATE STATISTICS News_Envio

No caso substitua News_Envio pelo nome de sua tabela. Agora execute novamente o primeiro processo e ver?? um ganho significativo de velocidade de consulta. O que levava 1 minuto para executar, em menos de 1 segundo obt??m-se o resultado. Bom n???

Aprecie com modera????o o uso de ??ndices e leiam as refer??ncias para saber quais situa????es onde ?? vantagem ou n??o o uso deles.

3 respostas em “Melhorando o desempenho de consultas (SELECT) em tabelas grandes no SQL SERVER”

Realmente um post muito interessante, principalmente quem tem d??vidas no assunto, claro que vale lembrar que n??o ?? sair criando ??ndices, mas fiz uns testes em algumas tabelas de teste aqui, e deu certo. Muito Bom. Parab??ns !

Beto

Deixe um comentário para Reginaldo Rodrigues de Oliveira Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *