A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Encontro SQL BH May 2016 Desmistificando Índices com SQL Server.

Apresentações semelhantes


Apresentação em tema: "Encontro SQL BH May 2016 Desmistificando Índices com SQL Server."— Transcrição da apresentação:

1 Encontro SQL BH May 2016 Desmistificando Índices com SQL Server

2 Apoio

3

4 Local Chapters

5 5

6 Upcoming SQL Saturdays Brazil Jun 18Rio de Janeiro #512 Visit www.sqlsaturday.com to register for an event near you! www.sqlsaturday.com

7 Agenda Conceitos Fundamentais Estatísticas Índice agrupado Índice não agrupado Índices Filtrados 7

8 Conceitos Fundamentais 8

9 Como o SQL acessa dados? Table Scan Índice 9

10 Table Scan 10 BOM PASSEIO!!!

11 Com Índice 11

12 Estrutura dos Índices Normalmente baseado em estruturas de árvore O nó mais alto é o raiz e o mais baixo os chamados nós folha 12 Tabela Página Índice Raiz Páginas Índices Nós Folhas Nós

13 Diferentes tipos de dados e índices Números Pequenos e por isso rápidos para navegar. Se incremental, melhor ainda. Textos Contrário dos números Datas Só perdem para os números. Ótimos para ordenar e obter intervalos. GUID Alguns dizem ser grande. Mas não é! Somente 16 bytes e pode ser comparado de maneira binária. Portanto muito rápido. BIT Equivocadamente dizem que não deve ser indexado 13

14 Seletividade, densidade Seletividade Quantas linhas serão retornadas em uma pesquisa, comparado ao total de linhas que existem Alta seletividade significa retornar um pequeno conjunto de linhas dentro do universo de dados Número de Valores Exclusivos / Número Total de Registros CPF X SEXO 14

15 Seletividade, densidade Densidade Na física – Massa / Volume Oposto a seletividade. Quando mais denso, menos seletivo normalmente, devido ao grande número de repetições. “MAIS DO MESMO” 15

16 Porque falar sobre isso? Chave primária é normalmente o índice mais seletivo Indexar colunas de baixa seletividade não vale a pena Lembrar que índices secundários são um ponteiro para o índice primário. Alta densidade significa centenas ou milhares de ponteiros para o primário. Escolha da ordem das colunas em um índice composto Otimizador de consultas faz uso destas estatísticas para escolher como criar os planos de execução 16

17 Quiz Você é DBA na sua empresa e o gerente de Recursos Humanos pediu a você que otimizasse a consulta de empregados para que ficasse o mais rápida possível. Qual coluna da tabela você usaria para filtrar rapidamente um empregado? 1.Sobrenome 2.O GUID 3.A data de admissão 4.A idade 5.O departamento 17

18 Primeiro Mito Índice deixa minhas alterações lentas? 18

19 Estatísticas 19

20 Estatísticas Criadas automaticamente com os índices Composto internamente de 03 partes: 1.Cabeçalho 2.Vetor de Densidade 3.Histograma DBCC show_statistics(‘nome da tabela ou view’, ‘nome da estatística’); 20

21 Estatísticas 21

22 Estatísticas - Histograma Retrata a distribuição de valores da coluna Mede a frequência de valores exclusivos Em resumo: calcula a Densidade / Seletividade Traz os passos usados para criar as estatísticas 22

23 Estatísticas - Cabeçalho Traz data e hora da última atualização Número total de linhas na ocasião Número de Passos no histograma (Máximo 200) Informa se é uma estatística agrupada para consultas de caracteres (char, varchar, etc) Se for um índice filtrado, traz a expressão do filtro 23

24 DEMO 24

25 Índice Simples Índice simples é aquele composto por uma única coluna. Útil quase sempre em colunas de alta seletividade 25

26 Índice Composto Índice composto é aquele formado por várias colunas Muito útil em consultas FREQUENTES de alta seletividade alcançada apenas em múltiplas colunas Índice composto pelas colunas A, B não é igual ao índice formado pelas colunas B,A Geralmente a boa prática nos diz para usar a coluna mais seletiva primeiro 26

27 Segundo Mito A ordem das colunas nos índices é indiferente? 27

28 Índice Agrupado 28

29 Índice Agrupado Páginas de dados da tabela são armazenados em uma sequência lógica As linhas são armazenados em uma sequência lógica junto com as páginas de dados Possível apenas um índice agrupado por tabela 29

30 Índice Agrupado - Criação Automaticamente ao especificar uma chave primária Manualmente, caso não exista 30 CREATE TABLE dbo.Article ( ArticleID int IDENTITY(1,1) PRIMARY KEY, ArticleName nvarchar(50) NOT NULL, PublicationDate date NOT NULL ); CREATE TABLE dbo.LogData ( LogID int IDENTITY(1,1), LogData xml NOT NULL ); ALTER TABLE dbo.LogData ADD CONSTRAINT PK_LogData PRIMARY KEY (LogId); CREATE CLUSTERED INDEX CL_LogTime ON dbo.LogTime(LogTimeID);

31 Terceiro Mito Se eu usar a coluna CPF como índice agrupado, terei lentidão na atualização de dados? 31

32 Incorporando espaço livre nos índices Pode resolver os problemas causados na alteração de dados FILLFACTOR PAD_INDEX (Aplica FILLFACTOR nas páginas intermediárias do índice 32

33 Índice agrupado eficiente Pequeno Estático Crescente Exclusivo 33

34 Índice agrupado – Tipos de Dados Adequados 34 TipoComentários intBom candidato principalmente se IDENTITY bigintBom candidato principalmente se IDENTITY uniqueidentifierAlguns possíveis problemas com tamanho varcharProblemas com tamanho, performance para ordenar e com o fato de normalmente não ser estático. dateProblemas por não ser exclusive, mas excelente para consultas de faixas smalldatetimeProblemas com exclusividade

35 Índice Não Agrupado 35

36 Índice não agrupado A página folha aponta para um índice agrupado normalmente Pode melhorar performance em colunas adicionais e muito utilizadas em consultas O impacto causado pela modificação de dados deve ser levado em conta 36

37 Índice não agrupado - Funcionamento 37 Índice agrupado Páginas contém dados idindex_id=1root_page Chave agrupada Página Raiz Páginas do Ìndice Nós Folha Contém a chave Página Raiz

38 Cláusula Include Colunas especificadas são adicionadas nos nós folha do índice não agrupado As colunas base, são ordenadas, as colunas incluídas não Não entra no limite de tamanho dos índices (16 colunas / 900 bytes) Evita a busca dos dados no índice agrupado Inclua TODAS as colunas que vai usar na sua consulta, senão perde o sentido SELECT EmployeeID, DepartmentID, LastName FROM Employee WHERE DepartmentID = 5 CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee(EmployeeID, DepartmentID) INCLUDE (Lastname) 38

39 Índices Filtrados 39

40 Índices Filtrados Melhor desempenho das consultas Redução do custo de manutenção do índice Redução do custo de armazenamento Muito útil em colunas com alto índice de nulabilidade Muito útil em colunas de alta densidade mas em consultas a valores de alta seletividade 40

41 41 Volunteering Opportunities PASS would not exist without its global network of passionate, dedicated, and hardworking volunteers. Volunteer today! For local opportunities, please visit: volunteer.sqlpass.org For PASS HQ related activities, please update the “MyVolunteering” section of your MyPASS profile.

42 Stay Involved! Sign up for a free membership today at sqlpass.org. Linked In: http://www.sqlpass.org/linkedinhttp://www.sqlpass.org/linkedin Facebook: http://www.sqlpass.org/facebookhttp://www.sqlpass.org/facebook Twitter: @SQLPASS PASS: http://www.sqlpass.orghttp://www.sqlpass.org

43 Daniel Silveira 43 daniel@wgcsistemas.com.br daniel.silveira.182 dansil2002 www.danielsilveira.com.br dansil2002

44 OBRIGADO!!!! 44


Carregar ppt "Encontro SQL BH May 2016 Desmistificando Índices com SQL Server."

Apresentações semelhantes


Anúncios Google