Otimização de SELECT
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

sms_mo
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.
Discussão (1)
Carregando comentários...