guismelo 0 Denunciar post Postado Dezembro 4, 2013 Eu estou com um script zend, que ele faz a seguinte chamada para função listar: $this->view->anuncios = $this->_anuncios->listar($where,$qtd,$posicao,$ordenarValor,$ordenarAno,'RAND()'); a função listar é essa: public function listar($where=NULL,$qtd=NULL,$posicao=NULL,$ordenarValor=NULL,$ordenarAno=NULL,$aleatorio=NULL,$mostrarFotoIndex=NULL) { include CAMINHO . "/controleDominios.php"; $select = $this->select() ->from(array('A'=>'anuncio'),array('idAnuncio','idPJ','idPF','dtCadastro')) ->join(array('V'=>'veiculo'), 'A.idVeiculo = V.idVeiculo',array('descricao','versao','renavam','preco','quilometragem','cambio','carroceria','placa','idVeiculo','numPortas','pastaDaImagem','estado','statusVei' =>'status')) ->join(array('MA'=>'marca'), 'MA.idMarca = V.idMarca',array('marca','idMarca')) ->join(array('MD'=>'modelo'), 'MD.idModelo = V.idModelo',array('modelo','idModelo')) ->join(array('COR'=>'cor'), 'COR.idCor = V.idCor',array('cor')) ->join(array('COMBUS'=>'combustivel'), 'COMBUS.idCombustivel = V.idCombustivel',array('combustivel')) ->join(array('ANO'=>'ano'), 'ANO.idAno = V.idAnoFabricacao',array('anoFabricacao' => 'ano')) ->join(array('ANO2'=>'ano'), 'ANO2.idAno = V.idAnoModelo',array('anoModelo' => 'ano')) ->join(array('TV'=>'tipoVeiculo'), 'TV.idTipoVeiculo = V.idTipoVeiculo',array('tipo')) ->joinLeft(array('PF' =>'pf'), 'PF.idPF = A.idPF',array('telPF' => 'tel','celPF' =>'cel','nomePF' =>'nome','idPF')) ->joinLeft(array('PJ'=> 'pj'), 'PJ.idPJ = A.idPJ',array('telPJ' => 'tel','celPJ' =>'cel','nomePJ' =>'nome','idPJ', 'pastaDaImagemPJ' => 'pastaDaImagem')) ->joinLeft(array('USER' =>'usuario'), 'USER.idUsuario = PF.idUsuario',array('emailPF' =>'email')) ->joinLeft(array('USER2' =>'usuario'), 'USER2.idUsuario = PJ.idUsuario',array('emailPJ' =>'email')) ->joinLeft(array('ENDE'=>'endereco'), '(ENDE.idEndereco = PF.idEndereco OR ENDE.idEndereco = PJ.idEndereco)',array('idCidade')) ->joinLeft(array('CIDA'=>'cidade'), 'CIDA.idCidade = ENDE.idCidade',array('idEstado','cidade')) ->joinLeft(array('ESTA'=>'estado'), 'ESTA.idEstado = CIDA.idEstado',array('sigla')) ->joinLeft(array('PLAN'=>'plano'), 'PLAN.idPlano = A.idPlano',array('idPlanoPF' =>'idPlano','qtdDiaPF'=>'qtdDia','planoPF' =>'plano','valorPlanoPF' =>'valor','tipoPlanoPF' =>'tipo')) ->joinLeft(array('PLAN2'=>'plano'), 'PLAN2.idPlano = A.idPlano',array('idPlanoPJ' =>'idPlano','qtdDiaPJ'=>'qtdDia','planoPJ' =>'plano','valorPlanoPJ' =>'valor','tipoPlanoPJ' =>'tipo')) ->joinLeft(array('FOTPJ'=>'foto'), 'FOTPJ.idPJ = A.idPJ',array('fotoPJ'=>'foto','dominioCadastrado')) ->joinLeft(array('PG'=>'pagamento'), 'PG.idAnuncio = A.idAnuncio') //->joinLeft(array('PG2'=>'pagamento'), 'PG2.idPJ = PJ.idPJ') ->group('V.idVeiculo') ->order($ordenarValor) ->order($ordenarAno) ->limit($qtd,$posicao) ->setIntegrityCheck(false); if(is_null($mostrarFotoIndex)) $select->joinLeft(array('FOT'=>'foto'), 'FOT.idVeiculo = V.idVeiculo',array('foto','dominioCadastrado')); else $select->join(array('FOT'=>'foto'), 'FOT.idVeiculo = V.idVeiculo',array('foto','dominioCadastrado')); if(!is_null($aleatorio)) $select->order($aleatorio); if(!is_null($where)) { $select->where($where . $whereDominio); } else if(!empty($whereDominioSemEND)) { $select->where($whereDominioSemEND); } // echo "<br>" . $select->__toString(); //exit(); return $this->fetchAll($select); } O problema de lentidão aparece principalmente quando usa-se o joinleft, porque o anuncio pode ser cadastrado como loja ou particular, e algum deles é nulo. No site essa pesquisa é extremamente lenta, alguem tem alguma ideia do que está errado e como consertar? Compartilhar este post Link para o post Compartilhar em outros sites
Micilini Roll 49 Denunciar post Postado Dezembro 4, 2013 Bem a quantidade de comando monotonos esta prevalecendo em seu codigo, bem eu recomendaria a tentar fazer isso sem esse script do zend...E se pergunta se realmente voce vai necessitar usar o jointleft? Compartilhar este post Link para o post Compartilhar em outros sites