Dúvida em inner join MySQL

Bom dia!

Estou tentando melhorar o desempenho de uma consulta, ela possui vários inner join, como ela está muito lenta, eu resolvi fazer inner join de outra select trazendo só os campos necessários da outra tabela, mas pelo que vejo, piorou ainda mais o desempenho, isso no oracle seria beleza, mas no mysql não… Alguma explicação para isso???

Obrigado!

Não conheço muito mysql, mas sei que tem os tipos de tabelas, e isso deve influir no desempenho.
No seu caso, acho que você deveria o tipo InnoDB para JOIN.

SAM
MyISAM
InnoDB
BerkeleyDB (BDB)
MERGE
HEAP

Dá uma olhada no link

http://www.mysqltutorial.org/understand-mysql-table-types-innodb-myisam.aspx

Olá,

Tu está fazendo a junção entre as tabelas com os campos indexados no “ON”?

A falta disto ajuda bastante a baixar a performance.

Abraço

Sim … estou utilizando ON… A lentidão é muito maior… vou achar outra forma… Valew

Olá,

Na verdade, eu já estava supondo que tu estava usando ON no Inner Join.

Minha pergunta é em relação aos campos que fazem a junção, dentro do ON.

SELECT A.* FROM TABELA_A A INNER JOIN TABELA B ON A.CAMPO = B.CAMPO AND A.CAMPO_1 = B.CAMPO_1 WHERE....

Eles tem índice?

Isto ajuda a aumentar a performance.

Abraço

Referente a tipos de tabelas, conforme o Alberes falou, as tabelas do tipo MyISAM costuma ser mais rapido do que a INNODB, porem acredito que não seja este o seu problema.

O que você pode verificar são os indices de suas tabelas, e analisar o plano de consulta que o MySQL está montando (Comando EXPLAIN)
Ex. EXPLAIN COMANDO SQL.

Outro detalhe que da para melhorar no MySQL são as configurações do banco de dados, como buffer de ordenação, etc etc… mas, a grande maioria dos problemas é nos indices, e na montagem da query.

Por isto seria interessante você enviar o seu SQL, juntamente com o resultado do plano de consulta e se possivel alguns dados das tabelas envolvidas, como quantidade de registros, indices, etc etc.

Somente com estes dados é possivel levantar os reais problemas da consulta
Att

Olha meu caro, vc deve estar colocando tabelas mais restritivas primeiro e as menos restritivas por último, uma das formas de otimizar as consultas é colocar das menos restritivas para as mais restritivas, pois o SGBD lê do fim para o início.
Faz uma árvore de otimização (Através da Algebra Relacional) pra tirar a melhor consulta, olha este link e vê:
http://ctgalina.googlepages.com/ProcessamentodeConsultas.ppt

Qualquer dúvida só perguntar, flw mano.

Por isto é interessante sempre analisar o Plano de Consulta, com ele você consegue sempre identificar gargalos, ou consulta má elaborada…

Att

Experimenta usar indices… Isso ajuda.
No meu caso ajudou muito.