[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