Pagina 1 din 3 123 UltimulUltimul
Rezultate 1 la 10 din 22

Subiect: Random from sql: cum sa il fac sa se incarce mai repede

  1. #1
    Avatarul lui evolution
    evolution este deconectat Membru SeoPedia
    Reputatie:
    39
    Data înscrierii
    29th October 2006
    Locaţie
    Bucuresti
    Posturi
    997
    Putere Rep
    39


    Implicit Random from sql: cum sa il fac sa se incarce mai repede

    Am mai multe produse ,impartite in categorii si subcategorii,fiecare cu un id number unic.Problema mea este ca e foarte solicitat serverul din cauza mysql .

    S-ar putea afisa altfel rezultatele random,din php ,ca sa se incarce mai repede paginile?

    $sql = "select * from produse WHERE (categorie='$categorie' and subcategorie='$subcategorie') ORDER BY RAND() LIMIT 15";
    $result = mysql_query ($sql);
    $nume_produs = $row["nume_produs"];
    $descriere = $row["descriere"];
    echo "
    $nume_produs $descriere

  2. #2
    Avatarul lui deadworldisee
    deadworldisee este deconectat Membru SeoPedia
    Reputatie:
    35
    Data înscrierii
    6th April 2008
    Locaţie
    iasi
    Vârstă
    38
    Posturi
    1.034
    Putere Rep
    35


    Implicit

    Citat Postat în original de evolution Vezi Post
    Am mai multe produse ,impartite in categorii si subcategorii,fiecare cu un id number unic.Problema mea este ca e foarte solicitat serverul din cauza mysql .

    S-ar putea afisa altfel rezultatele random,din php ,ca sa se incarce mai repede paginile?
    Sa-mi zici te rog cat timp dureaza query-ul tau si cat dureaza al meu...(vezi in phpmyadmin )

    SELECT * FROM produse AS a JOIN ( SELECT RAND( ) * ( SELECT MAX( id ) FROM produse ) AS id) AS b WHERE a.id >= b.id and categorie='$categorie' and subcategorie='$subcategorie' LIMIT 15

    Sper ca ai id cu primary si auto_increment in produse.....

  3. #3
    Avatarul lui danielbuca
    danielbuca este deconectat Ambasador
    Reputatie:
    39
    Data înscrierii
    13th August 2006
    Locaţie
    Bucharest
    Vârstă
    47
    Posturi
    431
    Putere Rep
    39


    Implicit

    Daca bagi intr-un sql order by rand() nu il faci sa mearga mai repede, in cele mai multe cazuri dureaza mai mult sa se execute (depinde de tipul de date din tabel si de marimea acestuia.

    Daca problema ta este viteza de executie inseamna ca problema e alta.

    Spune-mi, te rog, ce tip sunt declarate campurile categorie si subcategorie, cate campuri are tabela si cate inregistrari.

  4. #4
    Avatarul lui evolution
    evolution este deconectat Membru SeoPedia
    Reputatie:
    39
    Data înscrierii
    29th October 2006
    Locaţie
    Bucuresti
    Posturi
    997
    Putere Rep
    39


    Implicit

    Citat Postat în original de deadworldisee Vezi Post
    - ID este auto_increament;
    - ID primary este activa,adica pot da click pe ea;e inactiva numai la coloana descriere

    SELECT * FROM produse AS a JOIN ( SELECT RAND( ) * ( SELECT MAX( id ) FROM produse ) AS id) AS b WHERE a.id >= b.id and categorie='$categorie' and subcategorie='$subcategorie' LIMIT 15
    - id aici am pus 20 , adica selecteaza 20 de produse dupa care alege din ele 15,daca am inteles (am pus numar mai mare in caz ca lipseste vreun id)
    - la albastru trebuie modificat,adica in loc de a sa trec id-ul maxim din baza de date ,iar la b id-ul minim?
    - in URL rescris apare produs-1.4372686310087.html ,adica in loc de id apare acest nr 1.4372686310087;asta vad cum o rezolv,sa vad intai ca merge mai repede selectia

  5. #5
    Avatarul lui evolution
    evolution este deconectat Membru SeoPedia
    Reputatie:
    39
    Data înscrierii
    29th October 2006
    Locaţie
    Bucuresti
    Posturi
    997
    Putere Rep
    39


    Implicit

    Citat Postat în original de danielbuca Vezi Post
    - vreau sa folosesc random in continuare,caut o solutie sa mearga mai bine decat acum
    - categorie si subcategorie: Type: varchar(100) latin1_swedish_ci
    - tabela 35 de campuri si mai multe mii de id-uri (magazin online,cu informatii text si ceva poze)

    Imi merge greu si cand afiseaza lista de produse pe o categorie sau subcategorie anume,iar acelea nu sunt Random. Celelalte pagini sunt ok.
    Ultima modificare făcută de evolution; 3rd August 2008 la 17:46.

  6. #6
    Avatarul lui deadworldisee
    deadworldisee este deconectat Membru SeoPedia
    Reputatie:
    35
    Data înscrierii
    6th April 2008
    Locaţie
    iasi
    Vârstă
    38
    Posturi
    1.034
    Putere Rep
    35


    Implicit

    Citat Postat în original de evolution Vezi Post
    - ID este auto_increament;
    - ID primary este activa,adica pot da click pe ea;e inactiva numai la coloana descriere



    - id aici am pus 20 , adica selecteaza 20 de produse dupa care alege din ele 15,daca am inteles (am pus numar mai mare in caz ca lipseste vreun id)
    - la albastru trebuie modificat,adica in loc de a sa trec id-ul maxim din baza de date ,iar la b id-ul minim?
    - in URL rescris apare produs-1.4372686310087.html ,adica in loc de id apare acest nr 1.4372686310087;asta vad cum o rezolv,sa vad intai ca merge mai repede selectia
    Lol.... vezi ca id este un field nu il modifica tu cu numere. puneti in cod exact interogarea care ti-am dat-o.
    Testeaz-o si in phpmyadmin sa vezi ce timp iti da(DAR NU MODIFICA INTEROGAREA).

    Daca tabelul tau depaseste 5000 de row-uri,punei un index dupa categorie si subcategorie, o sa iti creasca viteza de cel putin 7-8 ori.

    Daca faci inserari in tabelu asta si tot din asta selectezi iti recomand sa faci 2 tabele una pt insert si alta pt select, pt ca mysql tine in ram vechile interogari astfel la a 2 interogare facuta returneaza cu o viteza foarte mare.(nu e si cazul pt random).

    pe locul 3 in speed pt mysql este tipul campurilor
    foloseste char pt campuri cu text pana in 255 charactere, varchar pt text pana in 10000 caractere,text pt campuri >10 k caractere cu full text pe el si evident selecturi cu mace against ......

    Fa pasii astia si o sa scoti un timp aprox 0,0050 pt limit 15...


    PS: eu folosesc random pt limit 3000 din peste 2 mil de rowuri si scot un timp de aprox 0.0100

  7. #7
    Avatarul lui evolution
    evolution este deconectat Membru SeoPedia
    Reputatie:
    39
    Data înscrierii
    29th October 2006
    Locaţie
    Bucuresti
    Posturi
    997
    Putere Rep
    39


    Implicit

    Intr-adevar deadworldisee,merge cu 50% mai repede ,iar daca pun index merge cu 60%. Nu inteleg ce inseamna a.id >= b.id ..,pentru ca nu imi mai afiseaza id-ul corect,cum am spus mai sus, in url-ul rescris si nu imi dau seama de ce.

    Tabel separat pentru inserari? Doar adaug produse noi.
    Ultima modificare făcută de evolution; 3rd August 2008 la 19:21.

  8. #8
    Avatarul lui deadworldisee
    deadworldisee este deconectat Membru SeoPedia
    Reputatie:
    35
    Data înscrierii
    6th April 2008
    Locaţie
    iasi
    Vârstă
    38
    Posturi
    1.034
    Putere Rep
    35


    Implicit

    pfff... nu o sa iti explic fiecare termen din interogare, insa b.id este cel mai mare id ales random si interogarea afiseaza 15 campuri dupa idul asta.Poate ca nu e 100% random dar oricum e mult mai rapid.

    Nu stiu ce vrei tu sa selectezi de acolo dar in chestia asta

    $result = mysql_query ($sql);
    $nume_produs = $row["nume_produs"];
    $descriere = $row["descriere"];
    echo "
    $nume_produs $descriere

    ti-ar mai trebui $row=mysql_fetch_array($result);
    Ultima modificare făcută de deadworldisee; 3rd August 2008 la 20:00.

  9. #9
    Avatarul lui loco
    loco este deconectat Membru SeoPedia
    Reputatie:
    33
    Data înscrierii
    6th February 2008
    Posturi
    145
    Putere Rep
    33


    Implicit

    Citat Postat în original de deadworldisee Vezi Post
    SELECT * FROM produse AS a JOIN ( SELECT RAND( ) * ( SELECT MAX( id ) FROM produse ) AS id) AS b WHERE a.id >= b.id and categorie='$categorie' and subcategorie='$subcategorie' LIMIT 15
    Sa zicem ca ultimul id (adica MAX(ID)) este 250.
    RAND() * 250 da numar cu virgula, daca RAND() < 1.
    Folosim CEIL pentru a rotunji numarul si a sacapa de ,

    Asta nu putea fi scrisa ca
    SELECT * FROM produse AS a JOIN ( SELECT CEIL(RAND( )*( SELECT id FROM produse ORDER BY id DESC LIMIT 1 )) AS id) AS b WHERE a.id >= b.id and categorie='$categorie' and subcategorie='$subcategorie' LIMIT 15
    ?

    Adica de ce MAX(id) din moment ce este index pe id?

    Si varchar este poate avea maxim 255 caractere. de ce recomanzi char(255)? Spatiu risipit aiurea daca nu se folosesc toate caracterele.

    Iar functia asta ia doar id-ul random (b.id) dupa care returneaza rezultatele comparate cu acel id (afiseaza produsele cu id mai mare sau egal decat id-ul random in limita a 15. de exemplu, daca sunt 3 ce respecta conditia asta, doar 3)
    Ultima modificare făcută de loco; 3rd August 2008 la 20:37.

  10. #10
    Avatarul lui danielbuca
    danielbuca este deconectat Ambasador
    Reputatie:
    39
    Data înscrierii
    13th August 2006
    Locaţie
    Bucharest
    Vârstă
    47
    Posturi
    431
    Putere Rep
    39


    Implicit

    Citat Postat în original de deadworldisee Vezi Post
    Lol....
    Exact ce a propus deadworldisee in postul de mai sus vroiam sa iti propun.
    Subcategorie si categorie trebuie sa aiba index pe ele ca sa iti mearga decent.

    Daca faci ordonare dupa rand() mysql isi va reface cache-ul la fiecare request deci performante nu o sa ai la tabele mari. Ideea e ca limit-ul se executa dupa ce se face where si order.
    Incearca sa limitezi recordsetul adaugand o conditie suplimentara pt ca order-ul sa se faca pe un recordset mai mic.

Pagina 1 din 3 123 UltimulUltimul

Informații subiect

Utilizatori care navighează în acest subiect

Momentan este/sunt 1 utilizator(i) care navighează în acest subiect. (0 membrii și 1 vizitatori)

Thread-uri Similare

  1. Cumpar link-uri - plata foarte repede prin PayPal
    De Mihai Gianu în forumul Link-uri/Bannere
    Răspunsuri: 0
    Ultimul Post: 1st June 2009, 15:00
  2. random links
    De Mascka în forumul Discutii generale privind optimizarea si motoarele de cautare
    Răspunsuri: 0
    Ultimul Post: 22nd July 2007, 15:38
  3. Ia-l Repede Cat Mai E Pe Stoc
    De Cristian Mezei în forumul Bar, lobby...
    Răspunsuri: 8
    Ultimul Post: 26th May 2006, 10:54

Permisiuni postare

  • Nu puteţi posta subiecte noi.
  • Nu puteţi răspunde la subiecte
  • Nu puteţi adăuga ataşamente
  • Nu puteţi modifica posturile proprii
  •