[MySQL 4.0] Abfrage optimieren

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

  • [MySQL 4.0] Abfrage optimieren

    hi, ich habe mit Hilfe von Abraxax folgendes SQL-Statement zusammen gebaut.

    PHP-Code:
    $sql 'SELECT 
    b.banner_id, 
    b.banner_name,
    b.banner_path_id,
    b.banner_url, 
    b.banner_html,
    b.banner_title,
    b.type,
    b.width,
    b.height,
    IF (b.max_view_activate = "1",
        IF (b.max_view_count < b.max_view, "1", "0"), "1")view_max_view_activate,
    IF (b.max_click_activate = "1",
        IF (b.max_click_count < b.max_click, "1", "0"),    "1")view_max_click_activate,
    IF (b.date_activate = "1",
        IF (b.date_start <= CURDATE(), 
            IF (b.date_end >= CURDATE(), "1", "0"), "0"), "1")view_date_activate,
    IF (b.time_activate = "1",
        IF (b.time_start <= CURTIME(), 
            IF (b.time_end >= CURTIME(), "1", "0"), "0"), "1")view_time_activate,
    IF (b.show_'
    .strtolower(date("D")).'="1", "1", "0")view_show_day
    FROM {prefix}banner_placement_relationship bp
    INNER JOIN {prefix}banner b ON (
        bp.banner_id = b.banner_id
        AND b.activate = "1"
    )
    WHERE bp.placement_id="'
    .$this->placements[$a].'" 
    HAVING view_max_view_activate="1"
        AND view_max_click_activate="1"
        AND view_date_activate="1"
        AND view_time_activate="1"
        AND view_show_day="1"
    ORDER BY RAND() LIMIT 1'

    Leider benötigt die Ausführung 11.93ms und da habe ich nur 1 Banner herausgeholt. Und auf einer Seite kann man mal locker 5 Banner rechnen, das macht dann ca. 55 ms und das finde ich einfach zu langsam.
    Indexe habe ich in der banner_placement_relationship Tabelle auf die Spalte placement_id gesetzt (die andere Spalte in dieser Tabelle ist banner_id) und in der banner Tabelle auf die Spalte banner_id. Leider ist es nicht viel schneller geworden (ca. 1ms).

    Was ich noch für ein Problem habe ist, ich muss ein Subselect einbauen (hier jetzt nicht für euch erkennbar), aber Subselects gibts anscheinend erst ab 4.1

    Zurück zum Problem: wie kann ich die Abfrage noch optimieren?
    Zuletzt geändert von Benny-one; 30.10.2005, 22:44.
    Sunshine CMS
    BannerAdManagement
    Borlabs - because we make IT easier
    Formulargenerator [color=red]Neu![/color]
    Herkunftsstatistik [color=red]Neu![/color]

  • #2
    nimm mal die ganzen IF()'s und HAVINGs wieder raus.

    das sind dann doch zu viele als ich dachte. ;-)

    du musst dann ggfls mehrere einzelanfragen machen. die sind in der summe u.u. schneller.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar

    Lädt...
    X