none
Problemas em Consulta SQL RRS feed

  • Pergunta

  • Boa Tarde Galera..
    Estou tendo um problema com uma consulta em banco de dados Sql Server 2005.

    Tenho um tabela que contém 23.000 notícias , e preciso montar o filtro para busca dessas notícias dinamicamente, só que o select que estou montando está demorando 45 segundos para trazer os resultados..
    Segue o Select abaixo, alguém poderia por favorm em ajudar...
    PS : esse select é montado dinamicamente por uma procedure onde eu passo o código do filtro como parâmetro.
    Valeu galera...

    SELECT 'Tecnologia' AS NOME_FILTRO, N.COD_NOTICIA, N.COD_FONTE, N.TITLE, N.DESCRIPTION, N.LINK, N.PUBDATE

    FROM NOTICIAS N

    JOIN FONTES F ON N.COD_FONTE = F.COD_FONTE

    AND (RTRIM(LTRIM(F.COD_IDIOMA)) = 'PTBR')

    WHERE

    (

    (

    (TITLE LIKE '%MCT%' OR TITLE LIKE '%FINEP%' OR TITLE LIKE '%FAPEMIG%' OR TITLE LIKE '%CNPQ%'

    OR TITLE LIKE '%FUNDOS SETORIAIS%' OR TITLE LIKE '%INOVAÇÃO%' OR TITLE LIKE '%INCLUSÃO DIGITAL%'

    OR TITLE LIKE '%CAPES%' OR TITLE LIKE '%BIOTECNOLOGIA%' OR TITLE LIKE '%FUNDO SETORIAL%'

    OR TITLE LIKE '%FAPESP%' OR TITLE LIKE '%ALBERTO PORTUGAL%'

    OR TITLE LIKE '%ALBERTO DUQUE PORTUGAL%' OR TITLE LIKE '%SECRETARIA DE CIÊNCIA%')

    OR

    (DESCRIPTION LIKE '%MCT%' OR DESCRIPTION LIKE '%FINEP%' OR DESCRIPTION LIKE '%FAPEMIG%' OR DESCRIPTION LIKE '%CNPQ%'

    OR DESCRIPTION LIKE '%FUNDOS SETORIAIS%' OR DESCRIPTION LIKE '%INOVAÇÃO%' OR DESCRIPTION LIKE '%INCLUSÃO DIGITAL%' OR DESCRIPTION LIKE '%CAPES%' OR DESCRIPTION LIKE '%BIOTECNOLOGIA%' OR DESCRIPTION LIKE '%FUNDO SETORIAL%' OR DESCRIPTION LIKE '%FAPESP%' OR DESCRIPTION LIKE '%ALBERTO PORTUGAL%' OR DESCRIPTION LIKE '%ALBERTO DUQUE PORTUGAL%'

    OR DESCRIPTION LIKE '%SECRETARIA DE CIÊNCIA %')

    )

    )

    AND NOT EXISTS

    (

    SELECT COD_NOTICIA FROM EXCLUSAO_FILTRO_NOTICIA WHERE COD_FILTRO = 4

    AND RTRIM(LTRIM(COD_NOTICIA)) = LTRIM(RTRIM(N.COD_NOTICIA))

    )

    domingo, 25 de fevereiro de 2007 17:56

Todas as Respostas

  • Bom dia Carlos o seu problema é que você tem muitos LIKE´s isso torna bastante lenta a sua consulta, uma boa sugestão seria você limitar o nº de registros retornados e também utilizar o sp_configure para retornar os registros imediatamente. Qualquer coisa retorne.

     

     

    Espero ter ajudado

    segunda-feira, 26 de fevereiro de 2007 13:20
  • Valeu cara,
    mas com faço isso ??
    pode me ajudar..
    não tenho muita moral com sp_configure..

    Valeu cara
    segunda-feira, 26 de fevereiro de 2007 13:43
  • Carlos o exemplo abaixo vai fazer com que o SQL Server vá exibindo os registros a medida de a consulta vai retornando os resultados.

    Qualquer coisa retorne

     

    sp_configure 'show advanced options', 1
    GO
    RECONFIGURE
    GO
    sp_configure 'cursor threshold', 0
    GO
    RECONFIGURE
    GO

     

    Espero ter ajudado

    segunda-feira, 26 de fevereiro de 2007 14:36
  • Valeu vou fazer os testes..
    Brigadão...
    segunda-feira, 26 de fevereiro de 2007 14:41
  • Cara, realmente são os seus likes que estão engasgando sua query. O que você pode fazer é criar uma segunda tabela com palavras-chave (MCT, FINEP, FAPEMIG, etc..) e uma terceira tabela que associa uma notícia a uma ou mais palavras-chave. Depois, faz um script onde, através desses likes, vc alimenta a tabela de correlação Noticia Vs. Palavra Chave. Depois, quando você quiser todas as notícias relacionadas a FINEP e MCT, vc vai na tabela de palavras chave e pega a identificação dessas duas, fazendo um join com a tabela de notícias. Assim vc só gasta tempo na primeira vez que aplica um filtro com like, depois fica rápido.

    Vc tb pode fazer uma stored procedure de busca que recebe uma palavra chave e retorna as noticias filtradas. Quando se tratar de uma palavra chave ainda não existente, vc retorna a tabela de notícias filtrada pelo like mesmo, mas já adiciona aquela palavra na tabela de palavras chave e a relação Palavra Chave Vs. Notícias na tabela de correlação.

    Espero que a idéia ajude,

    um abraço!

    quarta-feira, 28 de fevereiro de 2007 13:31
  • Opa, cara, valeu pela força,
    mas não entendi ao certo...
    como fazer.. se eu criar um outra tabela vou ter que ter um processo para atualizar as
    palavras chaves com a notícias.

    quarta-feira, 28 de fevereiro de 2007 15:37