Otimização no código

Boa tarde Galera!
Preciso de uma ajuda de vocês que são mais experientes. Estou com um problema de otimização.

Situação: Tenho na base de 3000 questões cadastradas em um baco de questões que preciso entregar para uma fila de revisores. mas com o código que fiz está muito lento. Não manjo muito de php.

session_start();
include_once '../../scripts/conexao.php';

$query = "SELECT id, idAtividadeAcademica FROM questoes WHERE situacao = 1  ORDER BY idAtividadeAcademica";

$result = mysqli_query($link, $query);

while ($questoes = mysqli_fetch_assoc($result)) {

    
    $query = "SELECT idProfessor FROM revisores_tecnicos WHERE idAtividadeAcademica = {$questoes['idAtividadeAcademica']} AND fila = 0";
    
    $result1 = mysqli_query($link, $query);
    $qtdRevisores = mysqli_num_rows($result1);
    $revisores = mysqli_fetch_assoc($result1);
    
    if($qtdRevisores < 2){
        $query = "UPDATE revisores_tecnicos SET fila = 0 WHERE idAtividadeAcademica = {$questoes['idAtividadeAcademica']}";
    }else {
        $query = "UPDATE revisores_tecnicos SET fila = 1 WHERE idProfessor = {$revisores['idProfessor']} AND idAtividadeAcademica = {$questoes['idAtividadeAcademica']}";
    }
    
    $result1 = mysqli_query($link, $query);
    
    
    $query = "UPDATE questoes SET idRevisor = {$revisores['idProfessor']}, situacao = 2 WHERE id = {$questoes['id']}";
    
    $result1 = mysqli_query($link, $query);
}

Usa stored procedure, se o banco que tiver usando suportar.

Verifique também se as tabelas possuem indice (idAtividadeAcademica, idProfessor etc)

Pesquise também sobre UPDATE com join no mysql…

Pensei em usar procedure, mas nunca mexi com isso, não sabia que dava pra fazer update com Join.
Vou dar uma estudada em ambas as coisas.

UPDATE com join também é uma boa. Importante é diminuir as idas e voltas ao banco.

1 curtida

De qualquer forma, indice bem construidos são fundamentais para performance, principalmente em chaves estrangeiras…

Pra que um while ???

Se pode resolver esse problema só com a parte das SQL, sabia

como ?

Update com join, algo nesse sentido:

UPDATE revisores_tecnicos rt, (
    SELECT DISTINCT a.idAtividadeAcademica, b.idProfessor 
    FROM questoes a 
    INNER JOIN revisores_tecnicos b 
    ON a.idAtividadeAcademica = b.idAtividadeAcademica 
    WHERE a.situacao = 1 AND b.fila = 0
) t SET rt.fila = 1 
WHERE rt.idProfessor = t.idProfessor 
AND rt.idAtividadeAcademica = t.idAtividadeAcademica;

Primeiro rode essa subquery dentro do update pra ver se o resultado é parecido com o que vc estava tentando fazer pelo php, se estiver certo é só verificar se bate com a revisores tecnicos que vc quer alterar, lembrando que apenas te mostrei o exemplo seguindo o else dentro do while que vc fez, o if vc se vira :joy:

Vai treinando, uma hora vc chega lá, sucesso!

E ai xofen, conseguiu resolver?

Estava sem internet até agora :expressionless:

Mas não entendi como fazer essa condição que fiz.

mas vou tentar fazer. Obrigado.