[MySQL 4.0] Viele Datensätze durchsuchen mit PHP

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

  • [MySQL 4.0] Viele Datensätze durchsuchen mit PHP

    Hallo Gemeinde,

    mit welchem SQL-Grundstatement ist es am geschicktesten, eine Datenbank mit über einer Millionen Datensätzen zu durchforsten.

    Interessant dabei ist zumeisten die Stichwort-Suche. Ich habe ein Query, welches über 7 bis weit über 14 Sekunden braucht.

    Weiterhin konnte ich feststellen, dass wenn das Ergebnis aus mehreren Datensätzen besteht, dass MySQL mit Limits schnell und gut arbeiten kann. Ein Limit 0, 30 bringt die ersten Ergebnisse in rascher Zeit, die Verweildauer beträgt gerade einmal 0,03 Sekunden.

    Ich hoffe, es gibt hier paar Spezis - Was haltet ihr denn von Caching ?

    Gruss

  • #2
    Re: [MySQL 4.0] Viele Datensätze durchsuchen mit PHP

    Original geschrieben von presentweb
    mit welchem SQL-Grundstatement ist es am geschicktesten, eine Datenbank mit über einer Millionen Datensätzen zu durchforsten.
    SELECT

    datenbank gut aufbauen, entitäten berücksichtigen, spalten indizieren, spaltenkombinationen indizieren...
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Deine Frage ist sehr allgemein gehalten. Vieles ist mögklich um das Datenbanksystem den Bedürfnissen anzupassen. Über Parameter läßt sich MySQL selbst tunen, denn es ist schon ein Unterschied ob vornehmlich die Daten lediglich abgefragt werden, die Daten hauptsächlich verändert, oder hauptsächlich Records eingefügt werden.
      Ungenaue Datentypen wirken sich ungünstig auf die Performance aus.
      Extremfall: Stell Dir vor Du hast Integerwerte und definierst für diese ein BOLB.

      http://dev.mysql.com/doc/mysql/en/Es...rformance.html
      http://dev.mysql.com/doc/mysql/en/Data_size.html
      http://dev.mysql.com/doc/mysql/en/InnoDB_tuning.html

      Kommentar


      • #4
        Hallo,

        vielen lieben Dank schon einmal für die ganzen Antworten mit Tipps und der Hilfestellungen.

        Folgendes ist kurios, wie ich finde:
        Gebe ich einen Suchbegriff zum Durchsuchen ein, welcher häufig vorkommt, z.B. "mp3" mit dem Limitations 0, 25 -- Dann rauschen die Ergebnisse binnen 0,Sekunden her.

        Geben ich aber nun etwas komischeres ein wie "sahdlkasjd alsdkjas" dauert es über 20 Sekunden, bis die Meldung "No Search results" eintrudelt.

        Liegt das nun primär am PHP oder MySQL ?
        Um das PHP Script offenzulegen, müsste ich die ganze Klasse posten, welche allerdings relativ lang ist.

        Gruss
        Zuletzt geändert von presentweb; 05.12.2004, 10:02.

        Kommentar


        • #5
          Das liegt ja an der Natur der Sache. Wenn der Begriff "mp3" häufig vorkommt, ist es auch sehr wahrscheinlich daß MySQL Dir die ersten 25 Treffer viel schneller anzeigen kann, als einen Suchbegriff der sehr selten vorkommt. Mitunter muß er beim seltenen Suchbegriff 5.ooo.ooo Datensätze durchforsten bis er was gefunden hat, im Falle von "mp3" kann MySQL Dir bereits eventuell nach 100 analysierten Records das erste 25er Resultat anzeigen.

          Wenn Du vorhast 1kg Pilze zu pflücken brauchst Du dafür während der Pilzzeit vielleicht 1 Stunde. Im Jänner wirst Du vermutlich 2 Tage brauchen. Es liegt also am Vorkommen.

          Es kann aber auch sein, daß Du im Jänner nach einer Woche feststellen muß - ich habe alles durchsucht -> "No Search results"

          Kommentar


          • #6
            Aja,

            das ist ja klar, hand.

            Danke dir.

            Ich werde da einwenig weiterbasteln müssen.

            Kommentar


            • #7
              Nochmal:

              Das ist die Klasse:
              http://web29.fkl3.syscore.de/class.Search.phps

              Zeile 197-202 musste ich auskommentieren, da die Suche sonst ewigkeiten dauert!
              Aber wieso nur ?
              Ich mache an der Stelle nix weiter als bisschen Mathematik und die Ermittlung der Suchergebnisse!

              Kommentar


              • #8
                PHP-Code:
                _#$result = mysql_query($query2, $this->c);
                 #$line = mysql_fetch_array($result, MYSQL_ASSOC);
                 #$return['vars']['totalresults'] = $line['total'];
                 #$return['vars']['pagemin']______= ($offset + 1);
                 #$return['vars']['pagemax']______= ($offset + $limit);
                 #$return['vars']['pages']________= round($line['total'] / $limit); 
                And der Mathematik wird's nicht liegen, aber Du setzt einen Request gegen die Datenbank ab:
                PHP-Code:
                 #$result = mysql_query($query2, $this->c); 
                Ich will mir nicht die ganze Klasse reinziehen, deshalb poste bitte das Ergebnis eines Print:
                PHP-Code:
                 print "=--> query2:$query2 <br>\n";
                 
                #$result = mysql_query($query2, $this->c); 
                würd mir gerne mal die Query ansehen.

                Kommentar

                Lädt...
                X