MCDBA Brasil


  • Home
  • Sobre
  • Contato

Livros





Links Rápidos

SQL Server Builds (All Versions/Editions)


Download SQL Server 2017 (trial)


SQL Server 2017 Feature Pack


SQL Server 2016 Feature Pack


Cumulative Update SQL Server 2017 builds


Cumulative Update SQL Server 2016 builds


Cumulative Update SQL Server 2014 builds


Cumulative Update SQL Server 2012 builds


SQL Server 2005/2008 Samples Databases


Documentando o Servidor SQL Server


Analisando a Performance do Servidor-CheckList


Virtual PASS PT


Faça parte do maior virtual chapter do PASS com conteúdos técnicos em Português sobre SQL Server.

Todos os meses um evento Online para você! Acompanhe aqui os WebCasts já agendados

Sindicalize seu blog ou site ao VirtualPASSPT

SQL Server Blogs

SQL Server Query Processing Team


SQL Programmability & API Development Team


SQL Server Manageability Team


Latin America Support Team


Database + Disk + Performance


Microsoft SQL Server Support


SQL CLR Team


SQL Query Optimization Team


SQL 2005 Code Samples


SQL Server Express Team


SQL SMO Samples


SQL Storage Engine Team


SQL CAT Team


SQL Protocols Team


PSS SQL Server Engineers


Slava Oks on SQLOS


Ken Henderson’s blog


LUTI@Microsoft Blog


kimberly L. Trip’s blog


Fernando Garcia Blog

Dica da Semana

Identificando a Melhor Coluna para o Índice

por Nilton Pinheiro agosto 5, 2008 Nenhum comentário

Exemplo:

Temos uma tabela com 37.000 linhas que possui várias colunas e entre elas temos: ORDERID, SHIPCOUNTRY e FIRSTNAME. As pesquisas sempre serão realizadas por SHIPCOUNTRY e FIRSTNAME.


Bom, de início é possível notar que precisaremos então de um índice composto pelas colunas SHIPCOUNTRY e FIRSTNAME, mas a pergunta aqui é: Em qual ordem de pesquisa teremos melhores ganhos de performance, (SHIPCOUNTRY, FIRSTNAME) ou (FIRSTNAME, SHIPCOUNTRY)?


Executando a query abaixo para calcular a seletividade das colunas, poderemos obter a resposta a esta pergunta:


— Verifica a seletividade da coluna ShipCountry’
SELECT  [Qtde. Registros] = COUNT(*),
 [Reg. Distintos] = COUNT(DISTINCT ShipCountry),
 — Quanto mais próximo de 1, melhor
 [Seletividade] = COUNT(DISTINCT ShipCountry)/CAST( COUNT(*) AS DEC(10,2)) 
FROM Orders


–Resultado
Qtde. Registros   Reg. Distintos    Seletividade
—————     ————–       ————-
830                              21              0.02530120481


— Verifica a seletividade da coluna FirstName’
SELECT  [Qtde. Registros] = COUNT(*),
 [Reg. Distintos] = COUNT(distinct FirstName),
 — Quanto mais próximo de 1, melhor
 [Seletividade] = COUNT(distinct FirstName)/CAST( count(*) AS DEC(10,2))
FROM Orders


–Resultado
Qtde. Registros   Reg. Distintos   Seletividade
—————      ————–     ————-
830                                 90          0.10843373493


O objetivo da análise é verificar quais das colunas de uma tabela terá maior seletividade (quanto mais próximo de 1, maior será a seletividade da coluna) e tornar esta coluna a primeira coluna do índice composto.


Seguindo nosso exemplo temos a seguinte:


Coluna – ShipCountry:
SELETIVIDADE = 0.02530120481


Coluna – FirstName:
SELETIVIDADE = 0.10843373493


Resultado final:
Comparando o valor retornado para a seletividade das duas colunas, constatamos que a coluna FirstName é a mais SELETIVA (possui um menor número de valores repetidos) e portanto deve ser considerada como a primeira coluna na composição de um índice composto.


Exemplo:


CREATE INDEX IxOrders_00 On Orders (FirstName, ShipCountry)


Sendo assim, ao invés de realizarmos nossa pesquisa como: WHERE SHIPCOUNTRY=’MÉXICO’ AND FIRSTNAME= ‘ANTONIO’
Devemos realizar como: WHERE FIRSTNAME= ‘ANTONIO’ AND SHIPCOUNTRY=’MÉXICO’


É claro que esta regra pode não atender a todos os sistemas, tudo dependerá muito da linha de pesquisa de cadaaplicação. Porém, esta dica server para a maioria dos sistemas OLTP com grandes volumes de transação e com muitas pesquisa em tabelas.


Uma boa prática também é independente do índice ser composto ou não, procurar sempre verificar a seletividade da coluna e na medida do possível, fazer desta coluna a chave do seu índice. Sempre que possível, verifique também o plano de execução de suas queries, ele lhe dirá o quanto seus índices estão sendo eficiêntes ou não.


Obviamente que colunas que sofrem atualizações (UPDATE) não devem ser consideradas como candidatas a compor o índice pois isto criará um ambiente proprício a page split [1], degradando assim a performance da sua aplicação.


[1] Page split é o termo utilizado para explicar a divisão de páginas de índices para acomodar novas inserções.

Avaliação:
Compartilhe:
  • Anterior Como usar a instrução SELECT no SQL Server17 anos atrás
  • Próximo Plano de Execução – O que analisar ?17 anos atrás

Deixe uma resposta Cancelar resposta

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

MVP Reconnect Award

Categorias

  • Artigos (359)
  • Dica da Semana (95)
  • Documentação (54)
  • Downloads (113)
  • MSDE 2000 (3)
  • Sem categoria (1)
  • Tutoriais (9)

Posts recentes

  • #FechouBrasil #PartiuPortugal
  • Brigando com o erro “The cached MSI file is missing”
  • MCDBABRASIL está de volta
  • Documentando o Servidor SQL Server
  • Brigando com os Erros 17182, 17826 e 17120

SQL Server AlwaysOn Video Series

Video1: Introdução ao SQLServer2012 AlwaysOn


Video2: Introdução ao SQLServer2012 AlwaysOn Availability Group


Video3: Introdução ao SQLServer2012 AlwaysOn AVG-Demo


Video4: Introdução ao SQLServer2012 AlwaysOn Listener


Video5: Introdução ao SQLServer2012 AlwaysOn Readable Secondaries


Video6: Introdução ao SQLServer2012 AlwaysOn Readable Secondaries-Demo


Video7: Introdução ao SQLServer2012 AlwaysOn Failover Clustering


Serie SQL Server Failover Clustering End-to-End

Parte 1: Configuração da Rede e Ambiente


Parte 2: Configurando o Windows 2008 R2 Domain Controler e DNS


Parte 3: Preparando os nós para o Failover Cluster


Parte 4: Configurando um Failover Cluster de 2 nós


Parte 5: Configurando as LUNs no iSCSI Software Target (Parte 1)


Parte 6: Configurando as LUNs no iSCSI Software Target (Parte 2)


Parte 7: Apresentando as LUNs para os nós do Failover Cluster


Parte 8: Configurando os discos no Failover Cluster


Parte 9: Instalando a primeira instância virtual do SQL Server 2008


Parte 10: Instalando a segunda instância virtual do SQL Server 2008


Parte 11: Instalando e Configurando o MSDTC no Failover Cluster


Parte 12: Configurando Mount Points no Cluster e SQL Server 2008


Vídeo Extra: Removendo uma Instância do SQL Server 2008 R2 em Cluster


Alta Disponibilidade no SQL Server 2008 R2: Failover Clustering Overview


Alta Disponibilidade no SQL Server 2008 R2: Failover Clustering na Prática

Menu

  • Home
  • Sobre
  • Contato

Mais

  • RSS Feeds
2025 MCDBA Brasil.