Ir para conteúdo

Arquivado

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

Piaui

Lentidão em Consulta em tabelas com muitos registros

Recommended Posts

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">
<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

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

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

Amigo, e se tu criar índices e views, não te adiantaria?

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.