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!
If you are a fan of online gambling, then you must have come across gry…
On the internet online casinos have transformed the betting industry, enabling players to vegas.hu online…
Casinos online offer free spins to draw new customers. These bonuses are usually very profitable,…
In recent times, online casino sites have actually obtained enormous appeal among gamers, providing a…
Bitcoin, the most preferred cryptocurrency worldwide, has reinvented lots of industries, including the on baixar…
Online slots have turned into one of one of the most preferred forms of home…