Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

gutolondrina

Otimizar query

Recommended Posts

Boa tarde pessoal.

 

Estou fazendo uma página onde deve listar:

 

foto = DS_EXT_BLRC

título = DS_TITULO_BLRC

data e hora = DT_PUBLICACAO_BLRC

autor do post = DS_COLUNISTA_CORC

resumo do post = DS_TEXTO_BLRC

total de comentarios de cada postagem = total_comentatios.

 

Os demais campos incluí para poder criar os links e o join.

 

O banco esta da seguinte forma blog (informações do post) e blog_coments (informações dos comentarios do post)

 

Fiz a seguinte query para listar estas informações:

 

 

SELECT
`blog`.`NR_SEQ_BLOG_BLRC`,
`blog`.`DS_EXT_BLRC`,
`blog`.`DS_TITULO_BLRC`,
`blog`.`DT_PUBLICACAO_BLRC`,
`blog`.`NR_SEQ_CATEGORIA_BLRC`,
`blog`.`NR_SEQ_COLUNISTA_BLRC`,
`blog`.`DS_TEXTO_BLRC`,
`colunistas`.`DS_COLUNISTA_CORC`,
(SELECT
COUNT(NR_SEQ_COMENTARIO_CBRC) AS total_comentatios
FROM
blog_coments
WHERE
NR_SEQ_BLOG_BLRC = NR_SEQ_BLOG_CBRC) AS `total_comentarios`
FROM
`blog`
INNER JOIN
`colunistas` ON blog.NR_SEQ_COLUNISTA_BLRC = colunistas.NR_SEQ_COLUNISTA_CORC
WHERE
(blog.DS_STATUS_BLRC = 'A')
ORDER BY `DT_PUBLICACAO_BLRC` DESC
Porém a query ficou muito pesada, por conter vários registros, gostaria de saber se alguém tem alguma opnião de como posso otimiza-la.
Desde já agredeço a atenção de vocês!
Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta subquery da coluna total_comentarios :

 

1 esta certa ? Não parece estar ligada à outra tabela.

 

2 não tentou coloca-la no join ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta subquery da coluna total_comentarios : 1 esta certa ? Não parece estar ligada à outra tabela. 2 não tentou coloca-la no join ?

Motta, acredito que esteja certa, me traz os resultados que quero, porém na primeira vez que roda demora 34 segundos, é muito tempo! a questão de fazer o join, acho que ficaria ainda mais pesada não acha? Mas obrigado por responder!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usa o Comando EXPLAIN seguido do seu select e posta o resultado com isso ele vai listar o que está utilizando os indices ou não.

 

para demorar tudo isso pode ser que a tabela blog não tem indice na coluna "DS_STATUS_BLRC" ou a tabela blog_coments não tem indice na coluna NR_SEQ_BLOG_CBRC ....

 

 

outra coisa que pode ocorrer de deixar assim demorado são as colunar relacionadas serem de tipos diferentes o que faz o MySQL não utilizar indices ... uma coluna double = coluna int, pode gerar esse tipo de problema....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Danilo, obrigado por responder eu

 

Usa o Comando EXPLAIN seguido do seu select e posta o resultado com isso ele vai listar o que está utilizando os indices ou não.

 

para demorar tudo isso pode ser que a tabela blog não tem indice na coluna "DS_STATUS_BLRC" ou a tabela blog_coments não tem indice na coluna NR_SEQ_BLOG_CBRC ....

 

 

outra coisa que pode ocorrer de deixar assim demorado são as colunar relacionadas serem de tipos diferentes o que faz o MySQL não utilizar indices ... uma coluna double = coluna int, pode gerar esse tipo de problema....

Danilo desculpe esqueci de marcar como resolvido, eu já havia feito o que você falou, as tabelas estavam "amarradas"de forma incorreta sem chaves estrangeiras e etc.

 

E a nomeclatura tá bizarra pkas, é que você ainda não viu o banco, sem ligação alguma!

o porque de estar assim? só o ultimo programador sabe porque, entrei a pouco tempo na empresa então assumi a bomba rsrsrs.. vou tentar migrar o banco para um novo em breve rsrs... mas valeuu!!! :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.