Inquiridor
Problemas em Consulta SQL

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.PUBDATEFROM
NOTICIAS NJOIN
FONTES F ON N.COD_FONTE = F.COD_FONTEAND
(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)) )
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
-
-
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
GOEspero ter ajudado
-
-
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!
-