Buscar

APOSTILADML02 LABBD

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

•1
SQL
•1
Índices
� Índices é maneira muito comum de melhorar a 
performance do banco de dados. Um índice permite ao 
servidor de banco de dados encontrar e retornar linhas 
específicas mais rapidamente do que sem índices. Mas 
índices também podem sobrecarregar o sistema de 
banco de dados, portanto deve ser usado com cuidado
•2
•2
Índices
� Índice primário
� A chave especifica qual registro possui aquela chave e 
aponta para este registro
� Índice secundário
� Índice cuja chave não pertence a chave primária
� A entrada aponta para todos os registros que contém 
aquele valor de chave X
•3
Índices
� Sugestões
� A coluna é frequentemente utilizada na 
cláusula where
� Para as FOREIGN KEYS, pois estão 
geralmente envolvidas em JOINS
� Para as PRIMARY KEYS e UNIQUE KEYS 
normalmente o SGBD cria 
automaticamente um índice
� Observações
� Não é permitida a alteração de índices
� Normalmente, a decisão de utilizar um 
índice ou não é do sistema, não do usuário
•4
•3
Tipos de Índices
� A grande maioria dos bancos oferecem pelo menos duas 
implementações para os índices
� B-Trees
� Hashing
� Onde as B-Trees são mais comumente utilizadas como 
estruturas que armazenam os índices
•5
B-Tree
� Definição
� Árvore de busca de ordem N
� A raiz possui no mínimo 2 filhos
� Cada folha possui no mínimo (n-1)/2 valores de chave
� Cada nó interior possui no mínimo n/2 filhos
� Todos os ramos tem o mesmo comprimento
•6
•4
B-Tree
•7
B-Tree
•8
•5
B-Tree
� Trabalha com consultas de igualdade 
ou comparação em dados que podem 
estar ordenados em qualquer ordem. O 
otimizados de consultas da maioria dos 
SGBDs usam o índice B-Tree nos 
campos onde foram criados quando há 
um destes operadores:
� <
� <=
� =
� >=
� >
•9
B-Tree
� Outras construções que são equivalentes aos operadores 
lógicos como BETWEEN e IN também fazem uso de 
índices B-Tree nas consultas realizadas. (Porém, 
dependendo do SGBD, a comparação IS NULL não é 
equivalente a = NULL portanto não utilizaria a estrutura 
de índices B-Tree)
•10
•6
B-Tree
� Consultas que envolvem busca por padrões como o 
operador LIKE quando o padrão é uma constante e é 
buscado só como início da string (Ex: nome LIKE ‘Luiz%’) 
também utiliza do índice para acelerar a consulta. 
Porém qualquer coisa fora deste padrão não utiliza 
índices. Ex:
� nome LIKE ‘%a%’ OR nome LIKE ‘pe%’
•11
Índice Hashing
� São usados pelo otimizador de 
consultas somente em condições de 
igualdade (operador =)
� Não é muito utilizado pois a princípio 
é mais lento que os indíces em B-Tree 
e em alguns bancos de dados, após 
alguma queda do servidor por 
exemplo, eles precisam ser 
reindexados
� CREATE INDEX name ON table
USING hash (column); (PostgreSQL)
•12
•7
Índice UNIQUE
� Índices UNIQUE podem ser utilizados para forçar que 
uma determinada coluna ou combinação de colunas 
terão valores únicos assim como a constraint UNIQUE
•13
Índice UNIQUE
� Quando um índice UNIQUE é criado, 
múltiplas linhas que contenham 
valores duplicados para a coluna(s) do 
índice criado não são permitidas. A 
maioria dos SGBDs como PostgreSQL 
cria automaticamente índices para 
chaves primárias e colunas UNIQUE 
definidas através de constraint por isto 
é importante definir esta situação por 
constraint e não criação de índices 
manualmente pois pode haver 
duplicação de informação
•14
•8
Comando INSERT
� Adiciona novas linhas a tabela requerida
� Se as colunas não forem especificadas, o comando 
assume as colunas na ordem de criação das tabelas 
devendo assim ser informados tantos valores quantas 
forem as colunas da tabela
•15
Comando INSERT
� Considere a tabela abaixo:
•16
•9
Comando INSERT
� O comando abaixo está correto?
•17
Comando INSERT
� O comando abaixo está correto?
� Temos dois problemas, pois estão faltando 2 
campos nos VALUES já que não foram 
especificados as colunas. O banco entende 
que os dados seriam inseridos na ordem das 
colunas que foram criadas
•18
•10
Comando INSERT
� O comando abaixo está correto?
•19
Comando INSERT
� O comando abaixo está correto?
•20
•11
Comando INSERT
� Quando omitimos alguma coluna como 
fizemos comando anterior omitindo a 
coluna registro e habilitação o SGBD 
tenta assumir para essas colunas o 
valor DEFAULT caso ele tenha sido 
definido OU tenta inserir NULL. 
Porém, o NULL depende da 
obrigatoriedade definida ao se criar a 
tabela, pois se for obrigatória o valor 
da coluna, o comando não será 
executado com sucesso
•21
Comando INSERT
� O comando abaixo está correto?
•22
•12
Comando INSERT
� Na maioria dos SGBDs comerciais é possível fazer 
inserções utilizando como entrada retornos de uma 
consulta que foi realizada. Alguns bancos aceitam que e 
em único comando INSERT possam ser inseridos vários 
dados de uma vez como o PostgreSQL porém isso 
depende de implementação do SGBD
•23
Comando INSERT
•24
•13
Comando UPDATE
� O objetivo é atualizar um registro ou um 
conjunto de registros nas colunas 
indicadas no comando que satisfazem as 
condições estabelecidas na cláusula 
WHERE recebendo os novos valores que 
são passados ou até mesmo valores vindos 
de outras tabelas. Somente as colunas 
especificadas no comando são atualizadas
•25
Comando UPDATE
� Table � Qual tabela terão registros atualizados
� Alias � Apelido que pode ser utilizado para se 
referenciar a tabela, porém qualquer campo abaixo vai 
ser referenciado por alias.nome_campo
� Column � Qual coluna da tabela que terá os valores 
alterados
•26
•14
Comando UPDATE
� Expression � A expressão que será atribuída 
a coluna. Pode ser uma constante, pode ser o 
resultado de uma stored procedure desde que 
ela retorne um resultado compatível com o 
tipo de dados do campo, pode ser ainda o 
valor vindo de outro campo de outra tabela e 
até mesmo o valor do próprio campo sendo 
usado com alguma operação como operações 
aritméticas por exemplo
� Fromlist � Assim como nas consultas 
(SELECTs), no comando UPDATE é possível 
trazer dados de outras tabelas para um 
possível join ou satisfazer alguma condição na 
cláusula WHERE
•27
Comando UPDATE
� Condition � Uma expressão que retorna um valor 
booleano. Somente os registros que atenderem a estas 
condições são afetados pelo UPDATE
•28
•15
Comando UPDATE
� Pode-se ainda atualizar linhas a partir de outra tabela
•29
Comando UPDATE
� Considere mais uma vez a estrutura
•30
•16
Comando UPDATE
� O que o comando abaixo realiza?
•31
Comando UPDATE
� É preciso sempre verificar atento as condições na 
cláusula WHERE pois qualquer erro pode representar 
uma atualização numa quantidade de registros muito 
grande ou até mesmo em toda a tabela causando um 
problema de última hora para voltar com as 
informações no seu estado anterior
•32
•17
Comando UPDATE
•33
Comando DELETE
� Comando para excluir as linhas de uma tabela que 
satisfazem uma condição
� É importante não confundir DELETE com DROP, o 
comando DROP destrói toda a estrutura inclusive os 
dados de uma tabela, enquanto o DELETE manipula 
dados de uma tabela, porém a estrutura sempre é 
mantida e nunca é afetada
•34
•18
Comando DELETE
•35
Sintaxe:
Apaga um conjunto de linhas que 
satisfazem a condição indicada:
Apaga todas as linhas da tabela Depto já 
que nenhuma condição foi indicada:

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais