 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| 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 |
|
| |
|