[SP-pm] Duvida: usar arquivo TXT ou tabela com campo array
Eden Cardim
edencardim at gmail.com
Fri Jul 30 11:10:45 PDT 2010
>>>>> "Renato" == Renato Santos <renato.cron em gmail.com> writes:
Renato> Como eu usaria o Exists? Ah, vou tentar explicar para que
Renato> criem os indexs.
Renato> Algo como: CREATE TEMP TABLE tmp_ciclos AS SELECT ciclo FROM
Renato> tb_ciclo_inicio GROUP BY ciclo ORDER BY ciclo DESC limit 10;
Renato> SELECT a.cod_cn, a.ciclo FROM tb_ciclo_inicio a INNER JOIN
Renato> tmp_ciclos b ON (a.ciclo = b.ciclo) ORDER BY cod_cn, ciclo
Cuidado, você precisa de um lock na tabela pra garantir resultados
consistentes. Alguma consulta pode mudar a ordenação da tabela antes que
a segunda consulta execute, e aí você vai obter os valores errados.
Essa é uma consulta bem chatinha de implementar mesmo, eu mudaria um
pouco a estratégia:
WITH cutoff AS
( SELECT min(ciclo) AS val
FROM tb_ciclo_inicio
ORDER BY ciclo DESC LIMIT 10
)
SELECT tci.cod_cn, tci.ciclo
FROM tb_ciclo_inicio tci
WHERE tci.ciclo <= (SELECT val FROM cutoff);
A cláusula WITH cria a tabela temporária automaticamente e como só tem 1
registro na tabela, não tem como acontecer scan. Sem o join vai
acontecer só um scan bem menor na tabela principal que com um índice
deve virar um index scan, que geralmente é rápido o suficiente, além
disso, tudo isso vai ocorrer dentro de uma única transação. P.S.: eu não
testei a consulta acima, pode ser que tenha algum erro de sintaxe.
More information about the SaoPaulo-pm
mailing list