Eu tenho uma tabela contendo os tempos de execução para geradores em locais diferentes, e eu quero para selecionar a entrada mais recente para cada site. Cada gerador é executado uma vez ou duas vezes por semana.
Eu tenho uma consulta que vai fazer isso, mas eu me pergunto se é a melhor opção. Não posso deixar de pensar que utilizando WHERE x IN (SELECT ...) é preguiçoso e não a melhor maneira de formular a consulta - qualquer consulta.
A tabela é a seguinte:
CREATE TABLE generator_logs (
id integer NOT NULL,
site_id character varying(4) NOT NULL,
start timestamp without time zone NOT NULL,
end timestamp without time zone NOT NULL,
duration integer NOT NULL
);
E a consulta:
SELECT id, site_id, start, end, duration
FROM generator_logs
WHERE start IN (SELECT MAX(start) AS start
FROM generator_logs
GROUP BY site_id)
ORDER BY start DESC
Não há uma enorme quantidade de dados, por isso não estou preocupado sobre como otimizar a consulta. No entanto, eu tenho que fazer coisas semelhantes em tabelas com 10s de milhões de linhas, (mesas grandes, tanto quanto eu estou preocupado!) E há otimização é mais importante.
Então, há uma melhor consulta para isso, e são consultas em linha geralmente uma má idéia?













