Re: Wie hole ich nur die ersten 100 Datensätze - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von Olaf Mertgen (263 Beiträge) am Donnerstag, 17.Januar.2002, 02:17. WWW: www.shareware4u.de
    Re: Wie hole ich nur die ersten 100 Datensätze

      Das war leider nur ein modifiziertes Beispiel, in der richtigen Abfrage ist noch eine zusätzliche Bedingung. Aber dann klappt das ja leider nicht mit dem sort=- (s.o.). Ich hab's aber an den wenigen Stellen, wo nur eine Bedingung ist geändert und es hat schon ein bisschen was gebracht.


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von Olaf Mertgen (263 Beiträge) am Dienstag, 15.Januar.2002, 20:11. WWW: www.shareware4u.de
    Wie hole ich nur die ersten 100 Datensätze

      Hallo,

      ich möchte aus einer großen Tabelle bei einer bestimmten Sortierung nur die ersten 100 Datensätze (Top 100). Wenn ich mit range arbeite, erhalte ich zwar nur die ersten 100 für die aktuelle Schleife, aber es werden scheinbar trotzdem alle Datensätze geholt, die die Bedingungen erfüllen, denn die Aufrufzeiten sind recht hoch.

      Hat jemand eine Idee?

      Gruß, Olaf

     Antworten

    Beitrag von Sander (8133 Beiträge) am Dienstag, 15.Januar.2002, 20:16.
    Re: Wie hole ich nur die ersten 100 Datensätze

      sind sie zeiten gleichgroß wie ohne range?
      Also ich merke schon deutlich einen unterschied.

      Sander

     Antworten

    Beitrag von Olaf Mertgen (263 Beiträge) am Dienstag, 15.Januar.2002, 22:21. WWW: www.shareware4u.de
    Re: Wie hole ich nur die ersten 100 Datensätze

      Das kann ich nicht genau sagen.

      Wenn ich allerdings mit range=0,20 auf 3500 Datensätze zugreife, braucht es deutlich länger, als wenn ich mit range=0,20 auf nur 100 Datensätze zugreife, wirklich deutlich länger.

      Gruß, Olaf

     Antworten

    Beitrag von Oliver ;-) (439 Beiträge) am Mittwoch, 16.Januar.2002, 09:25.
    Re: Wie hole ich nur die ersten 100 Datensätze

      Hallo Olaf,

      Christoph hat eine Funktion zur Verfügung gestellt, mit der man ziemlich einfach die DB-Aufrufe messen kann.

      Siehe: http://www.baseportal.de/bpws_doku.html#a35

      Das ist wirklich eine gute Sache. Wenn du in einem Template mehrere DB-Aufrufe hast, setzt du einfach hinter jedem Aufruf

      out "Ausführungszeit: ".runtime;
      

      und du kannst von einem zum anderen nachverfolgen, wieviel Zeit verbraucht wird.

      Allerdings - und da hapert es auch ein wenig bei mir - fehlt mir das KnowHow, wie ich das ganze beschleunige. Ich kann eigentlich immer nur ausprobieren und neu messen.

      Grüße
      Oliver ;-)

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Mittwoch, 16.Januar.2002, 13:45.
    Re: Wie hole ich nur die ersten 100 Datensätze

      Sind denn dabei die Abfragen identisch? An sich ist es (relativ) egal wie gross die DB ist, wenn man mit range arbeitet - das holt tatsächlich nur die angegebene Anzahl (also hier 20) an Datensätzen...

     Antworten

    Beitrag von Olaf Mertgen (263 Beiträge) am Mittwoch, 16.Januar.2002, 16:09. WWW: www.shareware4u.de
    Re: Wie hole ich nur die ersten 100 Datensätze

      Ja, die Abfragen sind identisch, die einzige Änderung ist ist der Wert einer Bedingung, mal > 3, mal > 10. Bei > 10 enthält das Gesamtergebnis etwas nur 1/3 der Datensätze wie bei > 3. Mit runtime betrachtet geht der Aufruf wirklich deutlich schneller.

      Ich habe jetzt allerdings getrickst, indem ich die Tabelle in 5 kleine Tabellen mit Beziehung 1:1 zerlegt habe. Davon enthält eine Tabelle nur noch die wenigen indizierten Felder, über die die Abfrage sortiert und filtert. Die anderen Informationen hole ich dann in der Schleife mit einem einfachen get. Dadurch hole ich insgesamt weniger Infos und die komplizierte Abfrage mit sort etc. läuft über eine kleine Tabelle.

      Gruß, Olaf

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Mittwoch, 16.Januar.2002, 16:52.
    Re: Wie hole ich nur die ersten 100 Datensätze

      1/3 Gesamtergebnis: Dann hast Du aber nich mit "range" gearbeitet weil dann müsste das Gesamtergebnis ja immer die Anzahl sein die Du bei range angegeben hast ;-)

      Ansonsten is natürlich klar: Wenn er mehr holen muss dauerts natürlich länger...

      Klingt ganz schön kompliziert mit der Aufteilung etc. - mich würde schon interessieren, was Du da genau machen willst, vielleicht kann man das konzeptionell besser machen ,-)

     Antworten

    Beitrag von Olaf Mertgen (263 Beiträge) am Mittwoch, 16.Januar.2002, 17:23. WWW: www.shareware4u.de
    Re: Wie hole ich nur die ersten 100 Datensätze

      Doch doch, ich hab schon mit range gearbeitet :-)

      Beispiel:
      get "Downloads>3 sort=-Downloads range=0,30", "downloadcounter";
      $_amount liefert 30, $_amount_query liefert 300
      

      get "Downloads>10 sort=-Downloads range=0,30", "downloadcounter";
      $_amount liefert 30, $_amount_query liefert 100
      

      D.h. das Ergebnis mit range ist exakt das gleiche, sowohl bzgl Anzahl auch Inhalt der Datensätze, trotzdem ist die zweite Variante laut runtime schneller.

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Donnerstag, 17.Januar.2002, 00:21.
    Re: Wie hole ich nur die ersten 100 Datensätze

      Ah ja, das kann sein - wg. dem "sort" - denn bevor "range" greifen kann muss sortiert werden - das dauert mit 300 Datensätzen natürlich länger als mit 100...

      Du machst hier übrigens wieder denselben Fehler wie schon beim Thread "Abfrage beschleunigen": Du machst ein "sort=-Feld" - wobei nach "Feld" schon sortiert wurde - was Du willst ist: Die Einträge umdrehen und dafür ist ein "sort=-" ca. 3-Millionen-Mal besser... Versuchs mal mit:

      get "Downloads>10 sort=- range=0,30", "downloadcounter";
      

      Das sollte dann a) schneller sein als beide obigen Varianten und b) genauso schnell wie mit "Downloads>3"... ;-)

     Antworten

    Beitrag von Olaf Mertgen (263 Beiträge) am Donnerstag, 17.Januar.2002, 02:17. WWW: www.shareware4u.de
    Re: Wie hole ich nur die ersten 100 Datensätze

      Das war leider nur ein modifiziertes Beispiel, in der richtigen Abfrage ist noch eine zusätzliche Bedingung. Aber dann klappt das ja leider nicht mit dem sort=- (s.o.). Ich hab's aber an den wenigen Stellen, wo nur eine Bedingung ist geändert und es hat schon ein bisschen was gebracht.

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Donnerstag, 17.Januar.2002, 14:18.
    Re: Wie hole ich nur die ersten 100 Datensätze

      Folgender Universaltrick hilft immer:

      Mach ein zusätzliches Feld, in dem die beiden Bedingungsfelder _zusammen_ gespeichert werden. Also Beispiel: 2 Felder "Name" & "Vorname" - mach ein zusätzliches Feld "NameVorname" und speicher dort (beim Schreiben in die DB): "$Name,$Vorname" - jetzt kannst Du nach den beiden Bedingungen sortiert abfragen und hast nur eine einzige Abfrage:

      <do action=all NameVorname==*>
      

      Das is n alter Standardtrick beim Datenbank-Design, hat auch irgendnen wichtig-klingenden Namen, fällt mir aber jetzt nich ein ;-)

     Antworten

    Beitrag von Olaf Mertgen (263 Beiträge) am Donnerstag, 17.Januar.2002, 21:18. WWW: www.shareware4u.de
    Re: Wie hole ich nur die ersten 100 Datensätze

      Den kenn ich noch gar nicht, aber da könnte man auch selber drauf kommen. Ich werd mal schauen, wo das geht. Thx.

     Antworten


     
 Liste der Einträge von 51600 bis 51750:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.06s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!