Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

Help: MySQL RAND() neoptimizabil?
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Subiectul anterior :: Subiectul următor  
Autor Mesaj
Candyman



Data înscrierii: 22/Noi/2004
Mesaje: 9

Trimis: Mie Mar 02, 2005 11:36 am    Titlul subiectului: Help: MySQL RAND() neoptimizabil?  

Am nevoie sa scot dintr-o tabela cu cca 12.000 de rows un numar de rows random, functie de anumite conditii (care nu-mi permit sa generez ID-uri random din PHP, fiindca nu sunt sigur ca vor fi satisfacute). Indecsii sunt optimizati, query-ul normal se executa rapid (0.04 ms)

Insa un query cu ‘order by rand()’ face temporary table si filesort, si dureaza o vesnicie pentru un numar mare de rows in tabela (zeci de mii)

Stiti cumva o alta solutie?

Multumesc anticipat
Sus  
johnutz



Data înscrierii: 20/Iul/2004
Mesaje: 956
Locație: Între scaun și tastatură

Trimis: Mie Mar 02, 2005 1:32 pm    Titlul subiectului:  

Uite aici:
http://www.justinvincent.com/home/articles.php?articleId=1&page=5
Sus  
Candyman



Data înscrierii: 22/Noi/2004
Mesaje: 9

Trimis: Mie Mar 02, 2005 1:36 pm    Titlul subiectului:  

Multumesc, dar am specificat ca nu-mi permit sa generez ID-uri random din PHP, fiindca nu am cum sa verific daca satisfac conditiile. Cel mult pot genera un ID random si apoi selecta prima inregistrare cu ID>= cu el care sa satisfaca conditiile mele (nefiabil)
Sus  
johnutz



Data înscrierii: 20/Iul/2004
Mesaje: 956
Locație: Între scaun și tastatură

Trimis: Mie Mar 02, 2005 1:50 pm    Titlul subiectului:  

Chiar ai citit ce era acolo?<?php       mysql_connect("localhost", "mysql_user", "mysql_password")       or       die("could not connect");       mysql_select_db("mydb");       $result = mysql_query("SELECT count(*) FROM users");       $row = mysql_fetch_array($result);       $num_users = $row[0];       mysql_free_result($result);       $result = mysql_query("SELECT name FROM users LIMIT rand(0, $num_users-1) ,1");       $row = mysql_fetch_object($result);       mysql_free_result($result);       echo $row->name;  ?>
Deci:
- numeri records-urile
- alegi un numar random intre 0 si nr de records-uri
- ca sa obtii un singur rezultat faci "LIMIT rand(0, $num_users-1) ,1"

Aici nu e vorba de nici un ID.
Ce nu s-ar portivi e ca tu vroiai mai multe rows..
Si ar mai trebui sa ii pui si "WHERE..."
Sus  
Candyman



Data înscrierii: 22/Noi/2004
Mesaje: 9

Trimis: Mie Mar 02, 2005 2:28 pm    Titlul subiectului:  

Mda, m-am uitat in graba, scuze. Nu e chiar ideal, performanta va fi in continuare scazuta, totusi cred ca e mai bine decat ce aveam eu, multumesc :roll:
Alte idei, anyone?
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community