Fernando, valeu pela ajuda ai mas ficou lento do mesmo jeito, tava pensando
em criar uma tabela temporária com o segundo select e depois fazer o filtro
por ela que seria bem menor do que a tabela de pedidos original.

Alguem sabe como faz isso??

Grato.

-----Mensagem original-----
De: delphi-br@yahoogrupos.com.br [mailto:delphi...@yahoogrupos.com.br] Em
nome de Fernando Nati
Enviada em: quinta-feira, 15 de abril de 2010 17:14
Para: delphi-br@yahoogrupos.com.br
Assunto: Re: [delphi-br] [1/2OFF] SQL Lento no Firebird

Amigão,

Não usa o IN, usa o NOT Exists.

Ex:

SELECT CLI.COD_CLI, CLI.NOME_CLI
FROM CLIENTES CLI
WHERE CLI.SITUACAO = '2'
AND  NOT EXISTS (
SELECT 1
FROM SAI_CAB CAB
WHERE CAB.DIGITO = 'O' AND CAB.DT_PEDIDO > '01/01/2010'
AND      CAB.COD_CLI = CLI.COD_CLI
)

Testa aí e vê se resolveu!.

Fernando Nati.



2010/4/15 Iran Lima <i...@sgisolution.com.br>

>
>
> Galera estou executando o sql:
>
> SELECT CLI.COD_CLI, CLI.NOME_CLI
>
> FROM CLIENTES CLI
>
> WHERE CLI.SITUACAO = '2'
>
> AND COD_CLI NOT IN (
>
> SELECT DISTINCT(CAB.COD_CLI)
>
> FROM SAI_CAB CAB
>
> WHERE CAB.DIGITO = 'O' AND CAB.DT_PEDIDO > '01/01/2010'
>
> )
>
> Nele tem 2 “Select” executando separadamente da certa de 1s cada um, como
> podem ver o segundo “select” é so para filtrar o primeiro.
>
> Quando executo o SQL completo o mesmo demora muiiiiito como se escutasse o
> segundo “Select” para cada registro do primeiro (burrice do firebird)
sendo
> assim como criar uma tabela temporária com os registros do segundo
“select”
> para fazer o filtro ficar + rápido.
>
> Grato
>
> Iran.
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> 
>


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>



Responder a