Piaui 1 Denunciar post Postado Julho 14, 2016 Olá pessoal tudo vem? Estou com um problema tenho uma tabela com mais de 300 mil clientes e outra que é tem os consumo relacionado a cada cliente. A muita lentidão "trava as vezes" na minha consulta quando uso o JOIN entres as duas tabelas na consulta. Coisa que não acontece quando realizado em apenas uma das tabelas. PRECISO MUITO RESOLVER ESSE PROBLEMA MEU CHEFE TÁ PUTO JÁ. KKKKKK :mellow: EX da select : $query_teste_w = "SELECT * FROM (consumo LEFT JOIN clientes ON consumo.uc_cod=clientes.uc) {$where}"; CÓDIGO COMPLETO: <?php require_once('Connections/BHJ.php'); ?> <?php // Iniciamos o "contador" list($usec, $sec) = explode(' ', microtime()); $script_start = (float) $sec + (float) $usec; $filtros = Array(); $mes = (string)$_POST['mes']; $cliente = (string)$_POST['cliente']; $irregularidade = (float)$_POST['irregularidade']; $cod_setor = $_POST['cod_setor']; $situacao = (string)$_POST['situacao']; $classe = (string)$_POST['classe']; $subclasse = (string)$_POST['subclasse']; $fabricante = (string)$_POST['fabricante']; $nr_medido = (string)$_POST['nr_medido']; $uc = $_POST['uc']; if(!empty($mes)){ $filtros[] = "mes = '{$mes}'"; } if(!empty($cod_setor)){ $filtros[] = "cod_setor = {$cod_setor}"; } if(!empty($irregularidade)){ $filtros[] = "irregularidade = {$irregularidade}"; } if(!empty($cliente)){ $filtros[] = "cliente = {$cliente}"; } if(!empty($situacao)){ $filtros[] = "situacao = {$situacao}"; } if(!empty($classe)){ $filtros[] = "classe = {$classe}"; } if(!empty($subclasse)){ $filtros[] = "subclasse = {$subclasse}"; } if(!empty($fabricante)){ $filtros[] = "fabricante = {$fabricante}"; } if(!empty($forma_faturamento)){ $filtros[] = "forma_faturamento = {$forma_faturamento}"; } if(!empty($nr_medido)){ $filtros[] = "nr_medido = {$nr_medido}"; } if(!empty($uc)){ $filtros[] = "uc IN ({$uc})"; } if(count($filtros)){ $where = "WHERE " . join(" AND ", $filtros); }else{ $where = ""; } mysql_select_db($database_BHJ, $BHJ); $query_teste_w = "SELECT * FROM (consumo LEFT JOIN clientes ON consumo.uc_cod=clientes.uc) {$where}"; $teste_w = mysql_query($query_teste_w, $BHJ) or die(mysql_error()); $row_teste_w = mysql_fetch_assoc($teste_w); $totalRows_teste_w = mysql_num_rows($teste_w); // Terminamos o "contador" e exibimos list($usec, $sec) = explode(' ', microtime()); $script_end = (float) $sec + (float) $usec; $elapsed_time = round($script_end - $script_start, 5); ?> <?php $total_reg = "10"; // número de registros por página ?> <?php $pagina=$_GET['pagina']; if (!$pagina) { $pc = "1"; } else { $pc = $pagina; } ?> <?php $inicio = $pc - 1; $inicio = $inicio * $total_reg; ?> <?php $limite = mysql_query("$query_teste_w LIMIT $inicio,$total_reg"); $todos = mysql_query("$query_teste_w"); $tr = mysql_num_rows($todos); // verifica o número total de registros $tp = $tr / $total_reg; // verifica o número total de páginas // vamos criar a visualização while ($dados = mysql_fetch_array($limite)) { $nome = $dados["nome"]; echo "Nome: $nome<br>"; } // agora vamos criar os botões "Anterior e próximo" $anterior = $pc -1; $proximo = $pc +1; if ($pc>1) { echo " <a href='?pagina=$anterior'><- Anterior</a> "; } echo "|"; if ($pc<$tp) { echo " <a href='?pagina=$proximo'>Próxima -></a>"; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> <style type="text/css"> <!-- .style1 {color: #FF0000} --> </style> </head> <body> <p>TOTAL: <?php echo $totalRows_teste_w ?> </p> <P> <?php // Exibimos uma mensagem echo 'Elapsed time: ', $elapsed_time, ' secs. Memory usage: ', round(((memory_get_peak_usage(true) / 1024) / 1024), 2), 'Mb'; ?><p> <?php do { ?> <table width="100%" border="1"> <tr> <td><?php echo $row_teste_w['regional']; ?></td> <td><span class="style1"><?php echo $row_teste_w['cod_setor']; ?></span></td> <td><?php echo $row_teste_w['uc']; ?></td> <td><?php echo $row_teste_w['complemento']; ?></td> <td><?php echo $row_teste_w['bairro']; ?></td> <td><?php echo $row_teste_w['situacao']; ?></td> <td><?php echo $row_teste_w['data_ligacao']; ?></td> <td><?php echo $row_teste_w['fabricante']; ?></td> <td><?php echo $row_teste_w['cod_seguencia']; ?></td> <td><?php echo $row_teste_w['endereco']; ?></td> </tr> </table> <p> <?php } while ($row_teste_w = mysql_fetch_assoc($teste_w)); ?> </body> </html> <?php mysql_free_result($teste_w); ?> Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Julho 14, 2016 O que provavelmente está ocorrendo é que você não tem índices, comece por ai. Como você já está paginando os resultados a lentidão está no SGBD e não no PHP. Compartilhar este post Link para o post Compartilhar em outros sites
Piaui 1 Denunciar post Postado Julho 14, 2016 O que provavelmente está ocorrendo é que você não tem índices, comece por ai. Como você já está paginando os resultados a lentidão está no SGBD e não no PHP. Quando rodo esse mesmo select no MYSQL-Front também acontece a lentidão. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 14, 2016 http://dev.mysql.com/doc/refman/5.7/en/mysql-indexes.html http://it.toolbox.com/blogs/david/mysql-innodb-statistics-gathering-analyze-table-24075 https://dev.mysql.com/doc/refman/5.5/en/execution-plan-information.html Compartilhar este post Link para o post Compartilhar em outros sites
rpmarques 3 Denunciar post Postado Julho 14, 2016 Amigo, e se tu criar índices e views, não te adiantaria? Compartilhar este post Link para o post Compartilhar em outros sites