Jump to content
Guilherme Luiz

Otimização de SELECT

Recommended Posts

Olá pessoal,

 

Tenho a seguinte consulta

  $queryList  = "SELECT
    sms.id        as id,
    sms.mobile    as mobile,
    sms.ddi       as ddi,
    sms.send_date as dataEnvio,
    sms.dlr_date  as dataDlr,
    sms.status    as status,
    sms.substatus as descricao,
    sms.route     as rota,
    sms.cost      as tarifa,
    sms.currency  as moeda,
    w.flag        as flag,
    w.country     as pais,
    ctt.nome      as nome
    FROM sms_mt   as sms
    INNER JOIN worldwide as w ON w.ddi = sms.ddi
    LEFT JOIN (SELECT concat(ddi,mobile) as mobile, nome as nome FROM phonebook WHERE user_id='{$userID}') as ctt on ctt.mobile = sms.mobile
    WHERE sms.user_id='{$userID}' and sms.campaing_id='{$x['id']}'
    UNION ALL
    SELECT
    sms.id        as id,
    sms.mobile    as mobile,
    sms.ddi       as ddi,
    sms.dlr_date  as dataEnvio,
    sms.dlr_date  as dataDlr,
    sms.status    as status,
    sms.substatus as descricao,
    sms.route     as rota,
    sms.cost      as tarifa,
    sms.currency  as moeda,
    w.flag        as flag,
    w.country     as pais,
    ctt.nome      as nome
    FROM sms_mo   as sms
    INNER JOIN worldwide as w ON w.ddi = sms.ddi
    LEFT JOIN (SELECT concat(ddi,mobile) as mobile, nome as nome FROM phonebook WHERE user_id='{$userID}') as ctt on ctt.mobile = sms.mobile
    WHERE sms.user_id='{$userID}' and sms.campaing_id='{$x['id']}' and sms.billed=1
    ORDER BY dataEnvio DESC";
    $sqlList = mysqli_query($connect_sql,$queryList);
    while($list = @mysqli_fetch_assoc($sqlList)){
      $stats[] = [
        "id"        => (int)$list['id'],
        "mobile"    => $list['mobile'],
        "flag"      => "/includes/images/flags/{$list['flag']}.png",
        "ddi"       => $list['ddi'],
        "pais"      => $list['pais'],
        "nome"      => ((empty($list['nome'])) ? null : $list['nome']),
        "dataEnvio" => date("d/m/y H:i:s A", strtotime($list['dataEnvio'])),
        "dataDlr"   => date("d/m/y H:i:s A", strtotime($list['dataDlr'])),
        "status"    => $list['status'],
        "desc"      => $list['descricao'],
        "rota"      => $list['rota'],
        "tarifa"    => $list['tarifa'],
        "moeda"     => $list['moeda']
      ];
    }

Onde eu tenho a seguinte estrutura de tabelas

 

sms_mt

image.png.b508cb700bf7efc4d8c20374c6e0fbe6.png

 

sms_mo
image.png.73e17831f920a46404dc5c2244b5a7e2.png

 

Com a consulta que estou utilizando, eu estou tendo problemas de atraso na resposta.

Para consultas com mais de 3.000 registros, minha aplicação demora mais de 2 minutos para trazer tais resultados. o que eu acho muito tempo.

Se eu faço uma pesquisa de mais de 20k de linhas, a aplicação demora mais de 8 minutos...

 

Essa consulta eu puxo sem paginação porque a faço através do PHP + AngularJs que aplica a paginação com base no objeto json total recebido do banco de dados.

 

Como posso otimizar essa query ou a tabela para ter melhor performance?
Todas as colunas com a chavinha cinza de indice, estão agrupadas num indice indez unico.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Gemenson Miranda
      Oi pessoal, estou com um problema na minha hospedagem LInux do Godaddy, publiquei meu site, fiz o apontamento correto do banco de dados, mas quando acesso a URL o site me exibe HTTP ERROR 500 exibe realizei a configuração do arquivo .htaccess, alterei as permissões para (755), nada disso resolve... A questão e que sempre que comento as informações de apontamento do banco de dados no arquivo index.php o site carrega normalmente, porem sem conexão com o bando mysql, o que me faz pensar que o erro pode esta relacionado ao banco mysql, porem não consigo visualizar o erro por que a tela fica toda branca e não retorna nada, como resolver esse erro ou ao menos exibir qual erro causa ele?? agradeço!
    • By maruoppolo
      Olá, tenho 2 tabelas:
       
      tb_dados: ID - MUSICA
       
      tb_votos: ID - VOTO - RADIO - MUSICA
       
      Preciso fazer uma query que traga as musicas da tb_dados porém ordenando pelo número de votos que ela teve na tb_votos.
       
      Então assim, existem 2 tipos de voto 1 = like e 2 = dislike, cada ver que um usuário vota eu pego qual radio que ele esta ouvindo e salvo no campo radio, o id da musica na tb_dados e salvo no campo musica da tb_votos e coloco o número 1 para like e 2 para dislike no campo voto.
       
      A query precisa contar quantos likes teve na tv_votos filtrando por radio e mostrando os resultados em ordem decrescente as musicas com mais likes.
       
      A ideia é trazer as 10 musicas com mais like de cada radio
       
      Alguma ideia de como fazer?? Estou enroscado nisso a dias.
    • By Chester1
      oi, eu to tentando mexer com servidores agora no PHP e esta dando um erro muito estranho que quando eu procuro em um programa que acha erros de sintaxe ele me diz que o erro esta no </HTML>    se alguem puder me dizer qual foi o erro que eu cometi eu agradeceria
       

       
      <HTML> <HEAD><TITLE>incluindo no banco de dados</TITLE></HEAD> <body> <BODY bgcolor="#d0d0d0"> <center> <h3>Lanchonete coma bem (voltada para o internauta)</h3> <h1>24horas</h1> <?php $login_digitado=$_POST['login']; $senha=$_POST['senha']; $nome=$_POST['nome']; $email=$_POST['email']; $telefone=$_POST['telefone']; $celular=$_POST['celular']; $endereco=$_POST['endereco']; $complemento=$_POST['complemento']; if ($login_digitado == "" || $senha == "" || $nome =="" || $email == "" || $telefone == "" || $endereco == "" || $complemento == "") { echo "existem(m) campos(s) de preenchimento obrigatorio em branco,<BR> infelizmente tera que voltar para preenche-lo(s)."; echo "<BR><a href=\"cadastro.php\">clique aqui para tentar novamente</a>"; } else { { $link=mysql_connect("localhost", "root", "") or die ("<h1>nao foi possivel conectar !!!</h1> ".mysql_error());  
      obs :estou trabalhando com formularios e servidores
         
         
         
         
      ?>
      </BODY>
      </HTML>
    • By rainbowily
      Sou nova em sql e estou com duvida em como fazer uma consulta:
      Eu tenho uma tabela de produto(id, descricao), cor(id, nome) e produto_cor(id, id_produto, id_cor). Preciso descobrir se tem algum produto que tenhas as cores (1,2,3) respectivamente para não deixar cadastrar outro produto. Alguém poderia me ajudar? Obrigada



    • By DavidPin94
      Boa tarde, estou tentando criar uma validação para saber se o usuário já está cadastrado no meu banco de dados para meu sistema ficar mais organizado, porém quando realizo o teste cadastrando um usuário já cadastrado, o cadastro ocorre sendo que não era para ocorrer
      <?php require_once("conexao.php");?> <?php if (isset($_POST['usuario'])) { $nome = utf8_decode($_POST['usuario']); $senha = utf8_decode($_POST['senha']); $inserir = "INSERT INTO cadastro "; $inserir .= "(usuario, senha) "; $inserir .= "VALUES "; $inserir .= "('$nome', '$senha')"; $query = "SELECT usuario FROM cadastro WHERE usuario = '$usuario' LIMIT 1"; $consulta = mysqli_query($conecta, $query); $query = "SELECT usuario FROM clientes WHERE usuario = '$usuario' LIMIT 1"; $consulta = mysqli_query($conecta, $query); if (mysqli_num_rows($consulta) < 1) { $operacao_inserir = mysqli_query($conecta, $inserir); if (! $operacao_inserir) { die("Erro no banco"); }else header("location: login.php"); }else{ die("Usuário existente!"); } } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Cadastrar novo usuário</title> <link rel="stylesheet" type="text/css" href="estilo.css"> </head> <body> <nav> <ul> <li><a href="inicial.php">PÁGINA INICIAL</a></li> <li><a href="quem_somos.php">QUEM SOMOS</a></li> </ul> </nav> <div id="cadastro"> <form method="post" action="cadastro.php"> <label>Digite seu nome de usuário</label> <input type="text" name="usuario" placeholder="Ex: Usuario123" required size="50" minlength="5" maxlength="20" autofocus><br> <label>Digite sua senha</label> <input type="password" name="senha" placeholder="Deve conter mais de 5 caracteres" required size="50" minlength="5" maxlength="20" autofocus><br> <input type="submit" value="Cadastrar" id="enviar" name="enviar"> </form> </div> </body> </html> ,  alguém poderia me ajudar?  Meu código:
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.