Em uma das recentes verificações completas de integridade dos desemprenho do banco de dados, meu cliente teve um cenário muito interessante em que suas consultas estavam sendo executadas rapidamente, mas gradualmente começaram a ficar lentas e, eventualmente, passaram a demorar 10 minutos para serem executadas. Então eles me procuraram para ajustar sua consulta SQL lenta.
Ao olhar para o plano de execução da consulta SQL, há uma grande operação de pesquisa de chave que estava realmente desacelerando sua consulta. Por isso, decidi criar um índice com coluna include nessa tabela e resolver esse problema.
Vamos ver como resolver esse problema no mundo real.
USE TempDB GO -- Criando Tabela de Exemplo CREATE TABLE TabelaDeTeste (ID INT, Nome VARCHAR(100), Sobrenome VARCHAR(100)) GO
Em seguida, preencha a tabela de teste com dados de amostra.
-- Inserindo Dados INSERT INTO TabelaDeTeste (ID, Nome, Sobrenome) VALUES(1,'Wesley', 'Mota') GO INSERT INTO TabelaDeTeste (ID, Nome, Sobrenome) VALUES(1,'Wesley', 'Santana') GO 10000
Logo após, crie um índice clusterizado e um índice não clusterizado na tabela.
-- Índice Clusterizado na Coluna ID CREATE CLUSTERED INDEX IDX_TabelaDeTeste_ID ON TabelaDeTeste (ID) GO -- Índice não clusterizado na coluna Nome CREATE NONCLUSTERED INDEX IDXTabelaDeTeste_Nome ON TabelaDeTeste (Nome) GO
Logo em seguida, execute nossa consulta SQL com a ativação do plano de execução real. Você pode ativar o plano de execução real entrando na barra de ferramentas do SSMS >> Consulta SQL >> e “Incluir Plano de Execução Real”. Alternativamente, você também pode habilitar isso pressionando CTRL + M.
SELECT Nome, Sobrenome FROM TabelaDeTeste WHERE Nome = 'Wesley' GO
Agora você está pronto para executar a consulta. Logo após executar a consulta, abra o plano de execução.
No plano de execução, você notará que há uma pesquisa de chave além do uso do índice. O SQL Server tem que fazer a pesquisa de chave quando o índice não tem todas as colunas necessárias que a consulta está solicitando.
CREATE NONCLUSTERED INDEX IDXTabelaDeTeste_FirstName_Include ON TabelaDeTeste (Nome) INCLUDE(Sobrenome) GO
Nesse caso, você tem duas opções:
Para deixar mais prático, vou criar um novo índice em nosso exemplo. Portanto, lembre-se de criar muitos índices na tabela para retardar as operações de DML.
Logo após criar o índice, vamos executar a mesma consulta novamente e verificar o plano de execução.
Você pode ver no plano de execução que não há mais pesquisa de chave e a consulta também usa nosso índice recém-criado.
Aqui está o script para limpar o objeto que criamos.
DROP Table TabelaDeTeste GO
Existem muitos truques semelhantes para ajustar sua consulta SQL. Se acaso você precisar de ajuda para ajustar sua consulta lenta, entre em contato!
Utforska Topplista: Casinon utan licens med flest Megaways-slotsDet är ingen hemlighet att Megaways-slots har blivit…
ContentCultivo del pimiento¿Cómo beneficia la salud el pimentón ahumado?Enfermedades causadas por bacterias y virusPimentón de…
Content¿Cuáles son los mejores Nuevos Juegos gratuitos online?Qué es Poki? Ofrecemos acceso instantáneo a todos…
ContentErzählen Sie Ihre Geschichte: von Kampanien bis ins Herz Brasiliens, die Geschichte der Familie LandriEl…
ContentPrefeitura anuncia novo polo no Parque Eduardo Campos, no Pina, e espalha shows pela cidadeMarilia…
ContentStadtrundgänge Die Universitätsstadt Tübingen sucht seeger tübingen juwelier regelmäßig Verwaltungskräfte in verschiedenen Organisationseinheiten. Die Universitätsstadt…