Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou usando três WHILE para trazer um resultado de duas tabelas do banco de dados,uma tabela possui em torno de 1000 registro,outra tabela possui em torno de 1000000 de registros,só que estou notando que a maneira que estou fazendo,não está funcionando,pois está causando um lag no sistema.
São três While com select das mesmas tabelas,porém com condições diferentes,o que eu queria saber é se tem algo que eu possa estar fazendo para tentar melhor esse script.
$query = $conn->prepare("SELECT * FROM tabela1,tabela2 WHERE tabela1.var = '0' AND tabela1.var0 = '1' AND tabela1.var2 = '' AND tabela1.var3 = tabela2.var1 ORDER BY tabela2.var1");$query->execute();while ($result = $query->fetch(PDO::FETCH_ASSOC)){} $query = $conn->prepare("SELECT * FROM tabela1,tabela2 WHERE tabela1.var = '1' AND tabela1.var0 = '1' AND tabela1.var2 = '' AND tabela1.var3 = tabela2.var1 ORDER BY tabela2.var1");$query->execute();while ($result = $query->fetch(PDO::FETCH_ASSOC)){} $query = $conn->prepare("SELECT * FROM tabela1,tabela2 WHERE tabela1.var = '2' AND tabela1.var0 = '1' AND tabela1.var2 = '' AND tabela1.var3 = tabela2.var1 ORDER BY tabela2.var1");$query->execute();while ($result = $query->fetch(PDO::FETCH_ASSOC)){}
Obrigado!
Então,o que acontece é o seguinte,que eu não expliquei,é que esses resultados são de diversos usuários,o máximo que cada usuário iria carregar seria 100 resultados,ou até menos,pouquíssimos usuários iriam trazer mais do que 100 resultados.
Mesmo assim, aí entra o UX, você gostaria de ver uma carga de 100 resultados de uma só vez ? E nos dispositivos mobile como isso ficaria ? Eu, particularmente, fecharia. Entao sim, pagine os resultados, se tiver mais de 20, que eu já acho muito, já deve ser paginado!
Não são resultados que prejudicaria o desempenho da página em relação a celular ou qualquer outra coisa,é a mesma coisa de serem listados de 50 a 100 nomes,e nesse meu caso a paginação não seria legal.
É como eu disse,o que me parece ser o problema é tamanho da tabela que contém mais de 1 milhão de dados com a maneira que eu estou trazendo esses resultados,pelo menos o que eu acho.
Por exemplo,se 100 usuários acessarem essa página,vai gerar uma requisição enorme,entende o que estou dizendo,ai acaba pesando um pouco.
Primeiro tem que ver se esse seu BD está normalizado, se ele foi modelado da forma correta e etc, isso é um ponto crucial quando se fala em desempenho.
Segundo, você está fazendo 3 consultas as mesmas tabelas, não há possibilidade de unir essas consultas?
Então,a principio estou tentando retirar os 5 while na página e colocar apenas um para ver se consigo resolver o problema.
Em relação ao "seu BD está normalizado",o que você quis dizer com isso?
Obrigado!
Eu estive pensando em tentar fazer alguns testes tentando retirar as condições do SELECT,por exemplo fazer a busca de todos os registros sem condição,e depois eu coloco a condição,fazer o SELECT mais limpo no banco de dados,evitando que ele "perca" tempo na busca.
O que eu te recomendaria a fazer é criar tabs e utilizar ajax para fazer cada requisição já que a consulta é grande, e, ainda considerando que o resultado seria grande, paginar também com ajax, o que é bem fácil de fazer.