Economizando 198 megas com um único SELECT
Quero o nome, o preço e a categoria de um produto:
select * from Produtos p join Categorias c on c.id=p.categoria_id;
> 1, Livro Swift, 50.0, 3, Mobile > 2, Certificação Java, 50.0, 1, Java > 3, ...
Executo a query e por muitas semanas ela funciona lindamente em produção. Até que um dia o site começa a ficar lerdo... lerdo... lerdo... Mas local, funciona que é uma beleza.
Mas calma lá, eu disse que queria nome, preço e categoria, e eu - de maldade - abreviei a resposta lá em cima:
\> Livro Swift, 50.0, Mobile, Crie uma app do zero, utilizando boas práticas de programação, mas também entendendo os motivos e as características importantes da linguagem que revolucionou o mercado mobile iOS... > ...
O que eu fiz? Só quero nome, preço e categoria, mas estou trazendo tudo! Antes o produto não tinha campo descrição, e agora ele tem!
Imagine que tenho um banco pequeno, com 20 mil produtos. Cada produto tem um nome de 100 caracteres assim como a categoria. Isso quer dizer que eu queria transferir do HD do meu banco para a minha máquina cerca de 20000 * 200 = 4 megas.
Mas na verdade eu fiz um select *
!
Selecionei todos os campos! Se cada descrição completa de um produto tem 10 mil caracteres por causa do sumário do livro, temos então 20 mil produtos, cerca de 10 mil caracteres em cada um: 200 megas!
Boa sorte tirar tudo isso do seu HD. Boa sorte levar tudo isso pela rede de uma máquina para outra. Boa sorte construir as Strings em memória que representam estes valores.
select *
é perigoso por diversos motivos. O consumo de memória e banda é só um deles... pense a longo prazo: se o banco mudar você vai trazer mais coisa do que queria, e esse mais coisa talvez seja demais.
select nome, preco, categoria
from Produtos p
join Categorias c on c.id=p.categoria_id;
Novamente, com poucos caracteres, em determinados cenários, você muda completamente a eficiência de um banco de dados!
Gostou dessas práticas e dicas de SQL