Você está na página 1de 24

UNIDADE III -

ASPECTOS GERAIS DE PEFORMANCE –


OTIMIZAÇÃO DE CONSULTAS

Prof. Maria Teresa Marino


Bacharelado em Sistemas de Informação
Faculdades Integradas Campo-Grandenses

Maria Teresa Marino 1


INDICES - conceito

• Representam estruturas de dados (arquivos)


associadas à estrutura que contém os registros de
dados
• Ponteiros (ou atalhos) para os locais físicos dos
registros - aceleram a recuperação de registros
baseada no campo de indexação
• Objetivo: reduzir a E/S (I/O) do disco utilizando
um caminho indexado para localizar dados
rapidamente

Maria Teresa Marino 2


INDICES - conceito

• Dentro de um SGBD são considerados como


objetos
• São lógica e fisicamente independentes da tabela
que indexam
• Uma tabela pode conter diversos índices
• Em tabelas sem índice ocorre a leitura sequencial
ou “scan”, “ table scan”

Maria Teresa Marino 3


INDICES - conceito

• A recuperação dos registros é baseada nos


atributos que constituem a chave de pesquisa (ou
campo de indexação ) do índice
– qualquer combinação de colunas é permitida para
compor a chave de pesquisa, e em qualquer ordem
– chave de pesquisa não é o mesmo que chave no sentido
relacional

Maria Teresa Marino 4


INDICES - Quando criar?
• Quando a coluna for usada frequentemente na cláusula
WHERE ou em uma condição de junção
• Quando a coluna contiver uma ampla faixa de valores
• Quando a coluna contiver um grande número de valores
nulos
• Quando duas ou mais colunas forem usadas juntas com
frequencia em uma cláusula WHERE ou em uma condição
de junção
• Quando a tabela for grande e se esperar que a maioria das
consultas recupere menos que 2 a 4% das linhas

Maria Teresa Marino 5


INDICES - Quando NÃO criar?

• Quando a tabela for pequena


• Quando as colunas não forem utilizadas com
frequencia como uma condição na consulta
• Quando se esperar que a maioria das consultas
recupere mais que 2 a 4% das linhas
• Quando a tabela for atualizada com frequencia

Maria Teresa Marino 6


INDICES - mais NEM sempre é melhor

• Ter mais índices em uma tabela NÃO significa que


as consultas serão aceleradas
• inclusão, exclusão e alteração exigem TAMBÉM a
atualização do índices
– implicando em mais esforço do SGBD , acarretando
lentidão no processo de atualização
• É necessário mais espaço de armazenamento

Maria Teresa Marino 7


INDICES - classificação

• Índice Primário X Índice Secundário X Índice de


Cluster
• Índice Denso X Índice não Denso (Esparso)

Maria Teresa Marino 8


INDICES - classificação

• Índice Primário - a chave de pesquisa contém a chave


primária
• Índice Secundário - a chave de pesquisa é baseada e
qualquer campo que não a chave primária
• Índice de Cluster - construído sobre um campo que
não é campo chave e, portanto, diversos registros
podem ter o mesmo valor para este campo. Os
registros são “agrupados” segundo este campo

Maria Teresa Marino 9


INDICE CLUSTERIZADO

Entrada do índice
Pesquisa direto às
entradas de dados

NÃO CLUSTERIZADO

entrada de entrada de
dados dados

(Arquivo de índice)
(Arquivo de dados)

REGISTRO DE DADOS
REGISTRO DE DADOS

Maria Teresa Marino 10


ÍNDICE - classificação

• Índice denso - possui uma entrada no índice para


cada registro no arquivo de dados
– os registros podem estar armazenados em qualquer
ordem no arquivo
• Índice não denso (esparso) - é um índice para
blocos ou páginas do arquivo, cada um dos quais
contendo um grupo de registros
– os registros precisam estar ordenados segundo atributo
indexador

Maria Teresa Marino 11


ÍNDICE - denso X esparso

Ana, 22, 3000

Carlos, 42, 3000

22

João, 32, 15000 22

Luiz, 52, 3000 22


João
28
Daniel
32
Daniel, 22, 3000
Mariazinha
42
Huguinho, 22, 3000
52

67
Mariazinha, 28, 2000

Noel, 67, 3000

Índice Denso sobre


Índice NÃO Denso Arquivo de Dados IDADE
sobre NOME (ordenado por nome)

Maria Teresa Marino 12


INDICE DENSO x ESPARSO

• Índices densos são preferíveis aos esparsos -


permitem maior aceleração na recuperação
• Índices esparsos ocupam pouco espaço exigem
menos trabalho na manutenção em inserções e
exclusões

Maria Teresa Marino 13


CRIANDO/REMOVENDO ÍNDICE
(POSTGRESQL)

• CRIANDO INDICES
CREATE INDEX nome_indice ON nome_tabela
campo_indexação
Campo de indexação – atributo ou lista de atributos da
tabela

• REMOVENDO INDICES
DROP INDEX nome_indice

Maria Teresa Marino 14


TIPOS ÍNDICE (POSTGRESQL)
• B-tree
– tipo padrão (assume quando não indicamos, indicado para
consultas com os operadores: <, <=, =, >=, >. LIKE,
BETWEEN, IN
• R-tree
– tipo mais adequado a dados espaciais.
• Hash
– indicados para consultas com comparações de igualdade
simples.
– Desempenho baixo. Melhor o B-tree.

Maria Teresa Marino 15


TIPOS ÍNDICE (POSTGRESQL)
• GiST
– não é um único tipo de índice, mas uma infraestrutura
dentro da qual podem sem implementadas muitas
estratégias de indexação diferentes
– os operadores em particular com os quais o índice GiST
pode ser utilizado variam dependendo da estratégia de
indexação (a classe de operadores)

Maria Teresa Marino 16


TIPOS ÍNDICE (POSTGRESQL)

• Criando índices de tipos diferentes:


– CREATE INDEX nome ON tabela USING tipo
(campo);
tipo: BTREE, RTREE, HASH, GIST

Maria Teresa Marino 17


ÍNDICES ÚNICOS (POSTGRESQL)

• Os índices também podem ser utilizados para impor a


unicidade do valor de uma coluna, ou a unicidade dos
valores combinados de mais de uma coluna
CREATE UNIQUE INDEX nomeindice ON nome_tabela
(campo);
• Somente o método BTREE suporta índices únicos
• Utilizar com restrição - a melhor forma de impor
restrição de unicidade é utilizando CONSTRAINT
• Índices paras colunas únicas são criados
automaticamente

Maria Teresa Marino 18


ÍNDICES COM MAIS DE UMA COLUNA
(POSTGRESQL)
• INDICES COM MAIS DE UMA COLUNA
CREATE INDEX nomeindice ON nome_tabela (campo1,
campo2);
– só podem ser utilizados se as cláusulas envolvendo as
colunas indexadas forem ligadas por AND
– Somente os métodos BTREE e GIST suportam índices
com várias colunas
– devem ser utilizados com moderação - maioria das
vezes 1 coluna é suficiente, economizando tempo e
espaço

Maria Teresa Marino 19


ÍNDICES COM MAIS DE UMA COLUNA
(POSTGRESQL)
• EXEMPLO
CONSULTA 1
SELECT * FROM aluno WHERE bairro= ‘Campo Grande’
AND sexo=‘f’
INDICE
CREATE INDEX aluno_bairro_sexo ON aluno (bairro, sexo);
CONSULTA 2
SELECT * FROM aluno WHERE bairro= ‘Campo Grande’ OR
sexo=‘f’- NÃO FARÁ USO DO ÍNDICE

Maria Teresa Marino 20


ÍNDICES EM EXPRESSÕES (POSTGRESQL)

• A coluna do índice pode ser uma função ou uma expressão


escalar construída com várias colunas
CONSULTA 1
SELECT * FROM aluno WHERE lower (bairro)= ‘campo grande’
INDICE 1
CREATE INDEX aluno_bairro_min ON aluno (lower(bairro));
CONSULTA 2
SELECT * FROM aluno WHERE (primeiro_nome || ' ' || ultimo_nome) = ’Maria
Marino’
INDICE 2
CREATE INDEX aluno_nome ON aluno (primeiro_nome || ' ' || ultimo_nome)

Maria Teresa Marino 21


ÍNDICES PARCIAIS (POSTGRESQL)

• Construído sobre um subconjunto da tabela por meio de


uma expressão condicional (ou predicado)
• Contém entradas apenas para as linhas da tabela que
satisfazem o predicado
– INDICE
CREATE INDEX idx_pedidos_nao_faturados ON pedidos (num_pedido)
WHERE faturado is not true;
– CONSULTAS
SELECT * FROM pedidos WHERE faturado is not true and num_pedido <
10000
SELECT * FROM pedidos WHERE faturado is not true and valor > 5000

Maria Teresa Marino 22


ÍNDICES PARCIAIS (POSTGRESQL)
– CONSULTAS
SELECT * FROM pedidos WHERE faturado num_pedido =345 - NÃO FARÁ USO
DO ÍNDICE

• Evitar indexação de valores frequentes


– reduz o tamanho do índice - acelera as operações de consulta
– acelera as operações de atualização das tabelas - o índice não precisa ser
atualizado em todos os casos
• Utilizar com atenção - na maioria dos casos, o índice parcial não é
mais vantajoso do que o índice regular
• Formação de conhecimento - requer experiência e conhecimento
de como os índices funcionam no SGBD

Maria Teresa Marino 23


REFERENCIAS BIBLIOGRÁFICAS

• MANUAL POSTGRES

Maria Teresa Marino 24

Você também pode gostar