Daniel Paulo [email protected]. Introdução Informações de uma tabela ou view podem ser...
-
Upload
cacilda-mirandela-ramires -
Category
Documents
-
view
217 -
download
3
Transcript of Daniel Paulo [email protected]. Introdução Informações de uma tabela ou view podem ser...
![Page 1: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/1.jpg)
Daniel [email protected]
![Page 2: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/2.jpg)
IntroduçãoInformações de uma tabela ou view podem ser
encontradas de maneira mais rápida através da utilização de índices.
![Page 3: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/3.jpg)
ÍndicesCom a utilização dos índices, podemos encontrar
rapidamente uma determinada informação. O local em que essa informação está armazenada é indicada através de ponteiros (apontadores)
![Page 4: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/4.jpg)
- Um índice possui chaves definidas por uma ou mais colunas- Diminui os dados que serão lidos e retornados para a
consulta- Os índices garantem, ainda, a integridade dos dados - Para garantir performance é necessário a utilização e
manutenção dos índices- Os índices podem ser adicionados e retirados das tabelas
sem afetar o projeto lógico da tabela
![Page 5: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/5.jpg)
Estruturas de índices do SQL ServerOs índices são formados por várias páginas que, juntas compõem
uma estrutura similar a uma árvore, chamada Árvore-B+ ou B-tree.- Todos os caminhos que partem da "raiz" até as "folhas" possuem
comprimentos iguais- Um índice arvore-B apresenta diversos níveis- Cada um pode ser chamado de nível não-folha (non-leaf) ou nível
folha (leaf level)- Índice são armazenados em páginas de índices- Dados são armazenados em páginas de dados
![Page 6: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/6.jpg)
- Cada página ocupa 8KB- Nesta estruturas as chaves construídas com base
em uma ou várias colunas de uma view ou tabela
![Page 7: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/7.jpg)
![Page 8: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/8.jpg)
Índice ClusteredNeste tipo de estrutura, a tabela é ordenada fisicamente. Caso
não possua, este tipo de índice a estrutura será chamada de heap (pilha)
- As páginas de dados das tabelas, são encontradas no nível folha- Apenas 1 por tabela- Os índices Clustered sempre devem ser criados antes dos
índices non-clustered- Para que o índice clustered seja criado o SQL reconstrói a tabela
![Page 9: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/9.jpg)
- É necessário contar com 120% de espaço livre da tabela- O espaço ocupado pelo índice corresponde a 5% do espaço
total da tabela- Índice recomendado para colunas que sejam pesquisadas como
base em um intervalo de valores- Indicado em colunas que não apresentam repetição- Por padrão índice clustered sempre é criado para a Primary Key- Caso não seja especificado a propriedade UNIQUE o SQL inclui
uma coluna uniqueifier para que cada valor seja único
![Page 10: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/10.jpg)
- Otimiza a busca de valores únicos- Melhora a utilização do relacionamento entre
tabelas (Join)- Como uma coluna indexada é considerada única
podemos utilizar a cláusula IDENTITY
![Page 11: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/11.jpg)
Índice NonClusteredOs dados são ordenados de maneira lógica- Cada tabela pode conter até 249 índices NonClustered- A estrutura é praticamente a mesma do Clustered, com a diferença
que possui um ponteiro apontando para a página de dados- O índice será lido primeiramente pelo SQL para que os dados sejam
obtidos depois- Um índice Non_clustered será criado quando uma constraint
UNIQUE for criada
![Page 12: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/12.jpg)
- Várias colunas definidas num mesmo índice podem afetar a performance
- Um índice Non_cluestered ocupa espaço em disco
![Page 13: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/13.jpg)
Índice UNIQUE (Clustered ou NonClustered)Neste tipo de índice a coluna indexada não pode
conter valores repetidos
![Page 14: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/14.jpg)
Para solucionar o problema de valores duplicados:- Eliminar ou acrescentar colunas de modo que seja
possível garantir a integridade dos dados- Correção manual das informações- A opção IGNORE_DUP_KEY define a especificação do erro,
permitindo ou não a inserção de valores duplicados. - Os valores nulos são considerados, neste caso utilizar a
constraint NOT NULL
![Page 15: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/15.jpg)
Condições de utilização- Caso a tabela não possua índice Clustered ou se não
foi definido um índice NonClustred únicos o SQL cria automaticamente um índice Clustered único para a Primary Key
- A primary key não aceita valores nulos- Por padrão, o índice NonClustered único é criado
quando uma Constraint UNIQUE é definida
![Page 16: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/16.jpg)
Índice composto (Clustered ou NonClustered - único ou não)
Um índice composto que apresenta mais de uma coluna
![Page 17: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/17.jpg)
Índices comprimidosÍndices podem sofrer compressão, assim como as
tabelas, possibilitando uma melhor alocação em disco e ocupando menos espaço. A compressão não pode ser aplicada às tabelas de sistema.
![Page 18: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/18.jpg)
Índices particionados
![Page 19: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/19.jpg)
PilhasAlgumas tabelas podem apresentar páginas de dados sem
qualquer índice ou que possuem apenas índices do tipo NonClustered. Essas páginas são chamadas de pilhas.
- IAM (Index Allocation Map) Mapeamento dos Extendes.- PFS (Page Free Space) Busca de páginas que ofereçam o
espaço necessário para o armazenamento de uma nova linha.
![Page 20: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/20.jpg)
Tabela SysindexesTabela que apresenta as informações sobre os
índices dos objetos do banco de dados
![Page 21: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/21.jpg)
Determinando a criação de um índiceSeletividade: é o percentual obtido pela quantidade de
registros retornados da consulta em relação ao total da tabela.
- Caso uma consulta retorne poucos registros a seletividade será definida como alta.
- Para otimizar a performance de uma query com seletividade alta será necessário a criação de um índice.
![Page 22: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/22.jpg)
Densidade: é o número de valores repetidos em uma coluna.
- Quando existe pouca repetição a densidade é considerada como baixa
- Para otimizar a performance de uma query com densidade baixa será necessário a criação de um índice.
![Page 23: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/23.jpg)
Estatísticas: Tanto a seletividade como a distribuição dos valores-chave do índice são descritos por meio das estatísticas que fazem parte de todos os tipos de índices
- Por meio das estatísticas podemos avaliar a eficiência de um índice na recuperação dos dados
- Um relatório das estatísticas de um índice pode ser obtido por meio do comando DBCC_SHOW_STATISTICS
- As colunas sem índices também podem utilizar as estatísticas, desde que o comando CREATE STATISTICS seja executado
![Page 24: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/24.jpg)
- UPDATE STATISTICS atualiza as estatísticas- O SQL também realiza a atualização automática- As estatísticas devem conter as informações: quantidade de
registros, data e hora da última atualização, densidade, tamanho médio da chave utilizada como base da estatística, quantidade de etapas necessárias para a distribuição e o número de registros na amostra que será utilizada na análise
- As estatísticas podem ser criadas de forma automática utilizando a opção Auto Create Statistics
![Page 25: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/25.jpg)
- Criadas somente nas colunas indexadas que possuem dados e não indexadas que são definidas em cláusulas WHERE e operações JOIN
- Também é possível criar estatísticas manuais
![Page 26: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/26.jpg)
Criação de índices- Comando: CREATE INDEX- UNIQUE : Índice único- CLUSTERED: Apenas um por tabela- NONCLUSTERED: Até 249 por tabela- FILLFACTOR: Porcentagem que indica o quanto de preenchimento será aplicado na
páginas.- PADINDEX: Aplicado no nível não folha.- IGNORE_DUP_KEY: Permite a criação do índice sem a verificação de registros
duplicados.- DROP_EXISTING: Apaga o índice preexistente- STATISTICS_NORECOMPUTE: recálculo automático de estatísticas do índice
![Page 27: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/27.jpg)
Criando índices graficamente
Exemplo
![Page 28: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/28.jpg)
Obtendo informações sobre os índices
SP_HELPINDEX
![Page 29: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/29.jpg)
Manutenção de índicesCriando e atualizando as estatísticas
Create STATISTISCTS --eUPDATE STATISTISCTS
![Page 30: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/30.jpg)
Obtendo informações sobre estatísticas
A função STATS_DATE() mostra a data em que a estatística foi atualizadas
DBCC_SHOW_STATISTICS apresenta as informações das estatísticas
![Page 31: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/31.jpg)
DBCC SHOWCONTIGExibe informações de fragmentação para os dados
e índices da tabela ou exibição especificada.
Página: 208 à 214
![Page 32: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/32.jpg)
O otimizador de consultas e o plano de execuçãoPara que a execução das consultas atinja uma excelente performance
é preciso definir um plano de execução otimizado.
Sobrepondo o otimizadorPode ser definido um índice diretamente para a consulta utilizando o
HINT, conforme exemplo abaixo:
SELECT * FROM CLIENTEWITH (index = I_Clientes_3)
![Page 33: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/33.jpg)
![Page 34: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/34.jpg)
Operadores página 218 à 225
![Page 35: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/35.jpg)
Exemplo de Saída de um plano de execução exibido graficamente
Exemplo
![Page 36: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/36.jpg)
Índices Full-Text- Índices utilizados para campos do tipo TEXT- Os índices no SQL Server são armazenados nos arquivos
de dados de seu banco de dados, enquanto que os índices Full-Text são armazenados externamente em arquivos do seu sistema operacional.
- Só pode ter apenas um índice Full-Text por tabela.- Utiliza o serviços Microsoft Full-TEXT Engine for SQL Server
![Page 37: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/37.jpg)
FULL Population (Popular índices de texto completo)
A criação e a manutenção de um índice de texto completo envolvem popular o índice usando um processo chamado população (também conhecido como rastreamento).
- Ocorre na primeira vez que o índice é populado- Pode ser realizado de forma incremental
![Page 38: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/38.jpg)
Change Tracking Based PopulationO rastreamento das alterações ocorre em linhas modificadas de
uma tabela
Incremental Timestamp-based populationIncrementa a atualização do índice full-text para linhas
adicionadas, excluídas e alteradas a partir da última população.Neste modelo é necessário a utilização de uma colunas
TIMESTAMP.
![Page 39: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/39.jpg)
Criando um catálogo para índices FULL-TEXT
Exemplo página 230 à 235
![Page 40: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/40.jpg)
Pesquisando em colunas FULL-TEXT
- FREETEXT SELECT Title FROM Production WHERE FREETEXT (Document, 'vital safety ' );
- CONTAINSSELECT Name FROM Production WHERE CONTAINS(Name, ' Mountain OR Road
')
EXEMPLO página 236
![Page 41: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/41.jpg)
Saída de um plano de execução exibido graficamente
http://msdn.microsoft.com/pt-br/library/ms191158.aspx
![Page 42: Daniel Paulo dptsalvador@hotmail.com. Introdução Informações de uma tabela ou view podem ser encontradas de maneira mais rápida através da utilização.](https://reader035.fdocuments.net/reader035/viewer/2022062522/570638591a28abb8238fcbf3/html5/thumbnails/42.jpg)
Laboratório 240 à 255