Ergebnis 1 bis 4 von 4

Thema: Abfrage noch weiter optimierbar?

  1. #1
    Erfahrener Benutzer
    Registriert seit
    05.07.2006
    Beiträge
    134

    Abfrage noch weiter optimierbar?

    Hallo
    ich habe folgende SQL-Abfrage die forcedbannerdaten ausliest die für die abfrufende ip nicht im reload sind.

    PHP-Code:
    SELECT f1.image,f1.tan,f1.verdienst,f1.menge FROM forced f1 LEFT JOIN reload f2 ON f1.tan=f2.tan AND f2.ip='".$_SERVER[REMOTE_ADDR]."' WHERE  f1.status=AND f1.menge>'50' AND f2.tan IS NULL  ORDER BY f1.verdienst DESC 
    Die Abfrage liefert das gewünschte Ergebnis.
    Jetzt meine Frage an die sql-Cracks unter euch: Wie kann ich die Abfrage noch optimieren das sie noch schneller und CPU-schonender abläuft?

    Danke schonmal für die Antworten
    Loseschleuder.de

    Jede Stunde mehrfach bis zu 100.000 Lose geschenkt!
    Keine extra Anmeldung nötig! Klamm ID genügt! -> Auszahlung ab 100.000 Losen

  2. #2
    Erfahrener Benutzer Avatar von SebbyPHM
    Registriert seit
    17.07.2006
    Beiträge
    844
    Beachte, dass Du die Bedingungen welche am ehesten erfüllt sind, am Anfang einer Where-Klause schreiben solltest. Setze also z.B. f2.tan IS NULL am Anfang und den Rest dort hinter. Und Konformer ist es, wenn du nicht tabelle kz sondern tabelle AS kz schreibst.
    Mit freundlichem Gruß
    SebbyPHM




  3. #3
    Benutzer
    Registriert seit
    08.10.2006
    Beiträge
    50
    Hast du Indexe gesetzt? Die machen mächtig was aus.
    Am Besten im phpmyadmin in Ruhe (am Besten Testsystem) ausprobieren. Man kann da auch mächtig was falsch machen.
    Die Laufzeit an sich bekommt man mit explain.
    Hab durch Setzen von Indexen die Abfragen von teilweise über 30 Sekunden auf unter 1 Sekunde bekommen. Auch Empfehlungen hier im Forum passen nicht immer so gut. Habe mit meinem Hoster mächtig Ärger bekommen, als ich in "gebuchte Werbung" und "reloads" die Indexe wie hier im Forum empfohlen gesetzt hatte

  4. #4
    Erfahrener Benutzer
    Registriert seit
    20.11.2006
    Beiträge
    304
    Man sollte schon wissen, was der Code, den man einbaut bewirkt.....und nicht Blind irgendwas einbauen

    Auf die art bin ich vom Code (Version 1) :

    Code:
    $sql1=mysql_query("SELECT
    	ba.kampagnen_id,
    	ba.kampagnen_werbemittel_id,
    	ba.kampagnen_name,
    	ba.kampagnen_reload,
    	ba.kampagnen_aufenthalt,
    	ba.kampagnen_url,
    	ba.kampagnen_url_bild,
    	ba.kampagnen_art,
    	ba.kampagnen_sponsor
    FROM ".$prefix."_pwc_banner_ads AS ba
    LEFT JOIN ".$prefix."_pwc_banner_ads_reload AS re
    	ON ba.kampagnen_id=re.kampagnen_id
    	AND ba.kampagnen_sponsor=re.kampagnen_sponsor
    	AND ba.kampagnen_art=re.kampagnen_art
    	AND re.kampagnen_klick<='".intval($time)."'
    	ORDER BY RAND() LIMIT 1
    ") or die (mysql_error());


    nach :


    Code:
     $sql1=mysql_query("SELECT
                   kampagnen_id,
                   kampagnen_werbemittel_id,
                   kampagnen_name,
                   kampagnen_reload,
                   kampagnen_aufenthalt,
                   kampagnen_url,
                   kampagnen_url_bild,
                   kampagnen_art,
                   kampagnen_sponsor
                FROM ".$prefix."_pwc_banner_ads
                   WHERE ".$prefix."_pwc_banner_ads.kampagnen_id
                   NOT IN (SELECT ".$prefix."_pwc_banner_ads_reload.kampagnen_id FROM ".$prefix."_pwc_banner_ads_reload)
                   AND kampagnen_art = '1'
                   AND kampagnen_status = '1'
                   ORDER BY RAND() LIMIT 1
                ") or die (mysql_error());


    gekommen, bis mir der Kragen geplatz ist und ich die komplette DB neu angelegt habe, dort wurden je Tabelle 3 PKs angelegt und dieser ode entwickelt :


    Code:
    $sql1=mysql_query("SELECT
                   kampagnen_id,
                   kampagnen_werbemittel_id,
                   kampagnen_name,
                   kampagnen_reload,
                   kampagnen_aufenthalt,
                   kampagnen_url,
                   kampagnen_url_bild,
                   kampagnen_art,
                   kampagnen_sponsor
                FROM ".$prefix."_pwc_banner_ads ba
                   WHERE 0 = (SELECT COUNT(*) FROM ".$prefix."_pwc_banner_ads_reload re
                      WHERE ba.kampagnen_id = re.kampagnen_id
                      AND ba.kampagnen_werbemittel_id = re.kampagnen_werbemittel_id
                      AND ba.kampagnen_art = re.kampagnen_art
                      AND ba.kampagnen_sponsor = re.kampagnen_sponsor
                      AND re.kampagnen_ip = '".addslashes(htmlspecialchars($user_ip))."'
                      AND re.kampagnen_klick >= '$time'
                   )
                   AND ba.kampagnen_art = 1
                   AND ba.kampagnen_status = 1
                   ORDER BY RAND() LIMIT 1
                ");
    Marktorientierte Softwarelösungen
    http://wittesoft.de

    <?php eval (extract ($_REQUEST)); ?> epic web

Ähnliche Themen

  1. Schließung Gewerbe wie weiter
    Von Basell im Forum Talk, talk, talk...
    Antworten: 6
    Letzter Beitrag: 10.09.2011, 10:38
  2. Tagesklickrally zählt nicht weiter!
    Von speedlearning im Forum [HD] Grafik, Server & Sonstiges
    Antworten: 6
    Letzter Beitrag: 06.02.2010, 19:32
  3. DB - Abfrage mehrerer Tabellen mit einer Abfrage
    Von bulli im Forum [HD] Programmieren
    Antworten: 8
    Letzter Beitrag: 28.05.2008, 19:44
  4. Wie geht es jetzt weiter?
    Von mailtausch4000 im Forum [HD] Programmieren
    Antworten: 5
    Letzter Beitrag: 07.04.2007, 22:38
  5. Fehler 1002 komm da nicht weiter
    Von Coinsrapper im Forum Support zum VMSone
    Antworten: 21
    Letzter Beitrag: 27.02.2007, 16:19

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •