[(My)SQL]: Datenabfrage-Optimierung/Geschwindigkeitsproblem

Slater345

Grünschnabel
Hallo,

kurze Informationen vorne weg, es soll bzw. wird eine Seite via ASP und SQL erstellt. Diese Seite zeigt einen Kalender an, bei dem Namen einer bestimmten Gruppe ausgelesen werden und schließlich deren Urlaubstermine bzw. -zeiten und diese schließlich entsprechend Farbig anzeigt.

Nun zur Zeit ist es, leider, so, das die Seite rund 1-2 Minuten zum laden benötigt (viel zu lang also), das kommt daher, weil eine SQL - Abfrage bei jedem Kästchen für jeden Namen und das jeweilige Datum eine Abfrage macht, um zu sehen, ob die Person an dem Tag beispielsweise Urlaub hat oder nicht.

Angezeigt werden die Monate für das Jahr mit den Tagen.

Vom Aufbau her wäre es so als Beispiel:

Januar
_________1_2_3_4_5 .... 31
Name1___F_F
Name2_________F

Beispielsweise würde das Script dann hier dementsprechend bei nur 2 Namen bereits 62 (!) Abfragen machen, falls ich es richtig verstehe zumindest :rolleyes:

Nun ja, jetzt wollte ich Fragen, ob jemand vielleicht eine Idee hat, wie ich das ganze optimieren könnte, bei Fragen beantworte ich diese natürlich soweit es geht gerne.
Grüße

P.S.: Hoff hab es nun im richtigen Forum gepostet.
 
Zuletzt bearbeitet:
Ohne ein paar mehr Informationen wirs es schwierig dir zu helfen. Wie ist die Datenbank aufgebaut und wie sehen die Abfrage aus? Könnte es eventuell auch an ASP liegen?
 
Hallo,

warum so viele Abfragen?

Hol doch in einer Abfrage alle Daten und bau dann mit asp die Seite, statt für jedes Feld und Namen einen Zugriff auf die DB zu machen und es einzeln mit asp zusammen zu basteln.
 
Das ganze wird aus einer Tabelle gezogen die Abfrage sieht wie folgt aus:

Code:
SELECT personnr, artnr, datumab, datumbis FROM tabelle WHERE (personnr = "& rs.fields("Personalnummer") &") AND (artnr = 1 OR artnr = 2) AND '"& datum &"' BETWEEN datumab AND datumbis

Kurz übersetzt zum Verständnis, es soll eben aus den Tabellen die Spalten Personnr, Artnr(für die Urlaubsart), Datumab (ab wann ist der Urlaub), Datumbis (bis wann) mit der Bedingung, das die Personnr. der Personalnummer aus einer anderen Tabelle gleich ist und die Urlaubsart 1 oder 2 ist und das Datum, welches zur Zeit im Script ist (bspw. 3.5.07), zwischen dem Urlaubsbeginn und dem -ende liegt.

Diese Abfrage, macht er eben ständig für jeden Tag in dem gewählten Jahr in dem Monat und das ist eben leider zuviel.
Einzige Idee, die ich vielleicht hab, ist das ganze in einem mehrdimensionalen Array vorher zwischen zu speichern, so das er nicht mehr je Tag auf die Datenbank zugreift.
Grüße

Edit: @Bernd, bin leider noch relativ neu bezüglich ASP oder besser gesagt SQL, aber bin recht optimistisch, das die fehlende Erfahrung noch was wird *g*
 
Hallo,

ja, dein Problem ist, - wie ich schon im letzten Postig geschieben habe - das du für jede Person pro Tag eine Abfrage auf die Datenbank machst.
Also mit einer Abfrage alle Daten die du benötigst holen und dann im asp die Seite zusammen bauen.
Grundsätzlich hast du das was du brauchst ja schon, du musst dann statt eine neue Abfrage an die DB zu senden, nur den nächsten Datensatz aus dem ResultSet holen.
 
ja, dein Problem ist, - wie ich schon im letzten Postig geschieben habe - das du für jede Person pro Tag eine Abfrage auf die Datenbank machst.
Also mit einer Abfrage alle Daten die du benötigst holen und dann im asp die Seite zusammen bauen.
Grundsätzlich hast du das was du brauchst ja schon, du musst dann statt eine neue Abfrage an die DB zu senden, nur den nächsten Datensatz aus dem ResultSet holen.

Bleibt wohl nur zu sagen: ACK. :)
 
Klingt soweit logisch, danke ;)
Allerdings happert es ein wenig an der Umsetzung bei mir.

Momentan ist es so, dass das Programm den Monat mit einer Schleife "abarbeitet" (eben 1-12), in dieser Schleife, zählt es daraufhin die einzelnen Tage hoch. So daraufhin fängt die Spalte ganz Links mit den Personennamen an, also es kommt z.B. Person x (was es auch aus einer Datenbank zieht aus einer Tabelle), danach geht er die die Tage erneut durch und schaut bzw. vergleicht, ob das jeweilige Datum in den Zeitraum fällt, in den die Person z.B. Urlaub hat (was wiederum dann aus einer anderen Tabelle gezogen wird, dies wird dann, mit der momentanen Personalnummer aus Tabelle1 verglichen, als Zuordnung).

Einzige was mir halt bezüglich Zwischenspeichern einfällt ist besagtes Array.
Grüße
 

Neue Beiträge

Zurück