Keresés

Új hozzászólás Aktív témák

  • Taci

    addikt

    válasz bambano #5104 üzenetére

    Talán ez lehet a jó irány...

    Most így néznek ki a lekérdezések:

    Az "eredeti" (a javasolt változtatásod előtti):
    SELECT i.item_id, i.item_date
    FROM items AS i 
    JOIN items_categories AS ic 
        ON i.item_id = ic.item_id 
    JOIN categories AS c 
        ON c.category_id = ic.category_id 
    WHERE 
    c.category_id NOT IN (1,3,13,7,20) 
    AND 
    i.item_id NOT IN (117,132,145,209,211) 
    GROUP BY i.item_id 
    ORDER BY i.item_date DESC LIMIT 4

    Showing rows 0 - 3 (4 total, Query took 10.8688 seconds.)

    A categories tábla kivétele a Join-ból:
    SELECT i.item_id, i.item_date
    FROM items AS i 
    JOIN items_categories AS ic 
        ON i.item_id = ic.item_id 
    WHERE 
    ic.category_id NOT IN (1,3,13,7,20) 
    AND 
    i.item_id NOT IN (117,132,145,209,211) 
    GROUP BY i.item_id 
    ORDER BY i.item_date DESC LIMIT 4

    Showing rows 0 - 3 (4 total, Query took 5.0478 seconds.)

    A subquery-s megoldás (WITH-et nem engedett használni, így most ezt a megoldást találtam a "helyettesítésére"):
    SELECT item_id, item_date
    FROM items
    WHERE 
    item_id IN (select item_id from items_categories where 
    category_id not in  (1,3,13,7,20) and 
    item_id not in (117,132,145,209,211))
    ORDER BY item_date DESC LIMIT 4

    Showing rows 0 - 3 (4 total, Query took 0.7163 seconds.)

    (És ide már nem is kell a Group By.)

    Frissítettem a db-fiddle-t vele.

    Mind a 3 változat ugyanazt a 4 rekordot adja vissza, helyesen.

    Ez utóbbi, az általad javasolt valóban sokkal gyorsabb - bár (lehet, az én implementálásom miatt) még így is lassú (0,8 mp környéki lekérdezés).
    (Furcsa mód ha kiveszem az Order By-t belőle (ami eddig csak lassította), a 0,8 mp-ből 6,6 mp lesz...)

    De ezzel talán már el lehet indulni ebbe (subquery) irányba.
    Még valami ötlet esetleg ehhez az irányhoz?

    Köszönöm a tippeket és hogy ránéztél!

Új hozzászólás Aktív témák