Prova Performance sql Leonardo Ramos
1- Para retornar todas as linhas de 2012.
CREATE INDEX tbl_idx ON tbl (date_column);
SELECT text, date_column
FROM tbl
WHERE TO_CHAR(date_column, 'YYYY') = '2012';
Marque:
(X) Boa prática
() Má prática
Explique sua escolha > Na consulta é realizado, uma transformação no campo de data, para retornar somente o ano “YYYY”. Acho que é a melhor prática para essa consulta.
2- Para encontrar a linha mais recente.
CREATE INDEX tbl_idx ON tbl (a, date_column);
SELECT id, a, date_column
FROM tbl
WHERE a = $1
ORDER BY date_column DESC
LIMIT 1;
Marque:
() Boa prática
(X) Má prática
Explique sua escolha > Na consulta pede somente para encontrar o registro mais recente. Acho que não faz sentido utilizar a clausula “Where” filtrando a coluna “a”, podendo se tornar menos performático.
3- Duas consultas, buscando por uma coluna em comum.
CREATE INDEX tbl_idx ON tbl (a, b);
SELECT id, a, b
FROM tbl
WHERE a = $1
AND b = $2;
SELECT id, a, b
FROM tbl
WHERE b = $1;
Marque:
() Boa prática
(X) Má prática
Explique sua escolha > Optei por má pratica, devido a consulta ser separada e não uma única consulta. Acredito e por experiência, que quando a consulta é unificada o resultado é mais satisfatório.
4- Para procurar registros no estado X nos últimos 5 anos.
CREATE INDEX tbl_idx ON tbl (date_column, state);
SELECT id, date_column, state FROM tbl WHERE date_column >= CURRENT_DATE - INTERVAL '5' YEAR AND state = 'X';
(365 rows)
The data distribution is as follows:
SELECT count(*) FROM tbl WHERE date_column >= CURRENT_DATE - INTERVAL '5' YEAR;
count
-------
1826
SELECT count(*) FROM tbl WHERE state = 'X';
count
-------
10000
Marque:
(X) Boa prática
() Má prática
Explique sua escolha > Na consulta é realizado primeiro o filtro por data e depois filtrando somente o “state = ‘X’”. Assim é otimizado o tempo para consulta, reparando que o volume de dados filtrando primeiro a coluna “state” e bem