Performance JOINs?! Navigation....

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Performance JOINs?! Navigation....

    Hallo,

    hab eine navigation für einen Shop
    die sich aus verschiedenen Attributen zusammen setzt.

    - Verwendung (Lifestyle,Fussbal etc...)
    - Artikelart ( Schuhe, Armbänder, Mützen etc...)
    - Geschlecht

    verschiedenste Merkmale eines Artikels werden natürlich auch in anderen Tabellen ausgelagert wie zb.:

    - geschlecht
    - farbe1 und 2
    - marke usw...

    der ursprungliche INNER JOIN geht über 6 Tabellen um die Navigation zusammen zu bauen. Das ganze ging bei rund 300 Artikel auch noch ganz flott...

    PHP-Code:
    SELECT t1.id_verwendungt1.verwendung 
     FROM $tbl_verwendung 
    as t1  
    INNER JOIN $tbl_zuweisung 
    as t2 ON t1.id_verwendung t2.id_verwendung 
    INNER JOIN $tbl_artikel 
    as t3 ON t2.id_artikel t3.id_artikel 
    INNER JOIN $tbl_groessen_zuweisung 
    as t4 ON t3.id_artikel t4.id_artikel 
    INNER JOIN $tbl_geschlecht 
    as t5 ON t3.id_geschlecht t5.id_geschlecht
    INNER JOIN $tbl_marke 
    as t0 ON t0.id_marke t3.id_marke 
    INNER JOIN $tbl_bild 
    as t7 ON t7.id_artikel t3.id_artikel
     WHERE t4
    .anzahl 
     
    AND t7.id_artikel IS NOT NULL
    GROUP BY t1
    .id_verwendung ORDER BY t1.verwendung 
    -> Zuweisung dient dazu um zu wissen in welchen Verwendungen der Artikel und und welche Artikelart er angehört.

    -> groessen_zuweisung sind die dazugehörigen Größen inkl Mengen

    Ziel der Abfrage war es das nur Menüpunkte angezeigt werden(Verwendungen und in ebene 2 Artikelart) in denen auch wirklich Artikel mit entweder:
    - Bestand > 0 ist
    - atkiv = 1 (aktiviert)
    - und ein bild haben t7.id_artikel IS NOT NULL

    Gestern hab ich dann mal test Insert´s in die Datenbank gespielt mit:
    6000 Artikeln
    jeder artikel 6 Groessen (32000 Groessen)
    und eine zuweisung (6000)

    tja und danach war es auch mit flott...dachte immer mit JOINS kann man so etwas optimal verknüpfen.
    Was mir auch komisch vorkommt ist das ich mal ein Test Join mit 3 Tabellen gemacht hab um nur das wichtigste abzufragen
    und da hat er mir direkt im PHP myadmin die Abfrage in 0.0041 Sekunden ausgeben um eine Verwendung(Menüpunkt zu überprüfen)

    Wenn ich aber das ganze jetzt im Script wie folgt ausführen lassen braucht der Hansel doch glatt 2-3 Sek für eine Verwendung zum überprüfen!!!

    Wie kann das sein arbeitet die Schnittstelle zwischen mysql und php so lahm?!

    hier der Testjoin code für die Navigation:

    PHP-Code:
    // Start Auflistung der Navigation
    echo '<ul id="navigation">';

    $sel_verwendungcheck    =    "SELECT * FROM $tbl_verwendung order by verwendung ASC";
    $res_verwendungcheck    mysql_query($sel_verwendungcheck);
    echo 
    mysql_error();

    while(
    $row_verwendungcheck=mysql_fetch_object($res_verwendungcheck))
    {
    $id_verwendungcheck[]    = $row_verwendungcheck->id_verwendung;
    $verwendungcheck[]        = $row_verwendungcheck->verwendung;
    }


    for(
    $t=0;$t<=mysql_num_rows($res_verwendungcheck);$t++)
    {

    $zeit1 date("H:i:s");
    $sel_zuweisung    =    "SELECT * FROM s_zuweisung as t1
    LEFT JOIN s_groessen_zuweisung as t2 ON t2.id_artikel = t1.id_artikel
    LEFT JOIN s_artikel as t3 ON t3.id_artikel = t1.id_artikel
    WHERE t1.id_verwendung = '
    $id_verwendungcheck[$t]' and t3.aktiv = '1' and t2.anzahl > '0'";

    $res_zuweisung    =    mysql_query($sel_zuweisung);


    if(
    mysql_num_rows($res_zuweisung)) 
    {

    // AUSGABE VERWENDUNGEN
    echo '<li class="ebene1"><a href="'.$_SERVER['PHP_SELF'].'?id_verwendung='.$id_vercheck.'&amp;id_marke='.$_REQUEST['id_marke'].'
    &amp;id_geschlecht_main='
    .$_REQUEST['id_geschlecht_main'].'&amp;markensuche='.$_REQUEST['markensuche'].'">
    '
    .$zeit1.' '.$verwendungcheck[$t].' '.date("H:i:s").'</a>';

    }

    }
    echo 
    '</ul>'
    Wie kann ich die Performance da steigern?

    Oder hat jemand einen guten LINK für mich bei dem dieses Thema schon behandelt wird? Oder einen Buchkauftipp?

  • #2
    Re: Performance JOINs?! Navigation....

    OffTopic:
    Bei Queries in Schleifen die Performance-Frage zu stellen, ist seltsam.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar

    Lädt...
    X