Eredmény: 1 - 8 (8) összesen

Téma: Select top n group by c mysql

  1. #1
    Hekker 0xFF logója
    Csatlakozott
    09-08-21
    Hozzászólás
    1.079
    Begyűjtött 168 köszönetet
    118 hozzászólásával

    Alapbeállítás Select top n group by c mysql

    Adott egy ~20 millió recordos tábla.
    [sxt]
    PHP kód:
    ID MAIN_ID VALUE 
    1      1                xyz
    2      1                xyz
    3      1                xyz
    4      2                xyz
    5      3                xyz
    6      1                xyz
    7      2                xyz
    8      3                xyz
    9      4                xyz
    10    5                xyz 
    Az szeretném elérni hogy a MAIN_ID oszlop szerint csoportosítva adja vissza mondjuk az első 3 sort
    SELECT ???? LIMIT 3 ???? ROWCOUNT? ...

    pl:
    PHP kód:
    1      1                xyz
    2      1                xyz
    3      1                xyz

    4      2                xyz
    7      2                xyz

    5      3                xyz
    8      3                xyz

    9      4                xyz
    10    5                xyz 
    Kipróbáltam már egy pár megoldást de mind 1 perc fölött végeztek, és ezt a lekérdezést szeretném akár percenként 4-5x futtatni.



  2. #2
    Törzsvendég flaszlo logója
    Csatlakozott
    10-10-07
    Hely
    Alsópáhok
    Hozzászólás
    138
    Begyűjtött 16 köszönetet
    15 hozzászólásával

    Alapbeállítás re: Select top n group by c mysql

    Group by kell neked, ez csoportosít.



  3. #3
    Hekker 0xFF logója
    Csatlakozott
    09-08-21
    Hozzászólás
    1.079
    Begyűjtött 168 köszönetet
    118 hozzászólásával

    Alapbeállítás re: Select top n group by c mysql

    A probléma sajnos nem egyszerű. A group by-al csak 1 sort kapok vissza csoportonként míg nekem pl 50 kellene.



  4. #4
    Törzsvendég flaszlo logója
    Csatlakozott
    10-10-07
    Hely
    Alsópáhok
    Hozzászólás
    138
    Begyűjtött 16 köszönetet
    15 hozzászólásával

    Alapbeállítás re: Select top n group by c mysql

    Idézet KForum eredeti hozzászólása Hozzászólás megtekintése
    A probléma sajnos nem egyszerű. A group by-al csak 1 sort kapok vissza csoportonként míg nekem pl 50 kellene.
    Ezt nem említetted...Leírhatnád pontosan mit szeretnél.



  5. #5
    problémageneráló ptrth logója
    Csatlakozott
    11-01-04
    Hely
    Diliház
    Hozzászólás
    209
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: Select top n group by c mysql

    Ilyesmivel próbálkoztál már?:

    Kód:
    set @sorsz :=0, @main_id :=0;
    SELECT id, main_id,value
    FROM (
    	SELECT id, main_id,value,
    		@sorsz:= if(@main_id = main_id, @sorsz+1,1) as sorszam,
    		@main_id := main_id as akarmi
    	FROM tabla
    	ORDER BY main_id, value
    ) as tmptabla where tmptabla.sorszam<=3;
    Elvileg jól kellene működnie, különösen, ha index van az oszlopokon, bár 20 millió sorra nem igazán tudom, mennyire hatékony.



  6. #6
    Hekker 0xFF logója
    Csatlakozott
    09-08-21
    Hozzászólás
    1.079
    Begyűjtött 168 köszönetet
    118 hozzászólásával

    Alapbeállítás re: Select top n group by c mysql

    Próbáltam ezt a fajta megoldást is, de nagyon lassú, nekem egyszerre csak 50 sor kellene de ha a limit-et a tmptabla.sorszam<=3 után rakom, akkor is végig nézi az egész táblát

    Showing rows 0 - 29 (100 total, Query took 74.5823 sec)



  7. #7
    Rubyist Geri logója
    Csatlakozott
    07-12-15
    Hely
    \x90
    Hozzászólás
    5.744
    Begyűjtött 1.428 köszönetet
    892 hozzászólásával

    Alapbeállítás re: Select top n group by c mysql

    Idézet KForum eredeti hozzászólása Hozzászólás megtekintése
    Próbáltam ezt a fajta megoldást is, de nagyon lassú, nekem egyszerre csak 50 sor kellene de ha a limit-et a tmptabla.sorszam<=3 után rakom, akkor is végig nézi az egész táblát

    Showing rows 0 - 29 (100 total, Query took 74.5823 sec)
    Teljesen nem ertem amit szeretnel, de ha ketteszeded a lekerdezest akkor sem gyorsabb? Mondjuk nyomsz egy distinct main_id-t, aztan egy ciklusban lenyomod a limit-es query-ket? Lehet ez meg lassabb lesz. Attol fugg mennyi unique main_id van.


    If debugging is the process of removing software bugs, then programming must be the process of putting them in.
    Ruby blog
    Give a man a fish and you feed him for a day. Teach a man to fish and you feed him for a lifetime.
    Respect all, fear none

  8. #8
    Hekker 0xFF logója
    Csatlakozott
    09-08-21
    Hozzászólás
    1.079
    Begyűjtött 168 köszönetet
    118 hozzászólásával

    Alapbeállítás re: Select top n group by c mysql

    main_id kb 300.000 van.

    Ha csak annyit simman GROUP BY LIMIT-et használok akkor viszonylag gyors.
    SELECT sxt.id, sxt.main_id, sxt.value FROM stx GROUP BY main_id LIMIT 50

    Ez 1 sec alatt megvan.

    A ciklusos megoldás nem hangzik rosszul... de ott is kellene valamilyen counter.



A téma címkéi:

Könyvjelzők

Hozzászólás szabályai

  • Új témákat nem hozhatsz létre
  • Válaszokat nem küldhetsz
  • Fájlokat nem csatolhatsz
  • A hozzászólásaidat nem módosíthatod
  •