Announcement

Collapse
No announcement yet.

Performance Tips gesucht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Performance Tips gesucht

    <p>Hallo !</p>
    <p>Ich habe bisher nur mit kleinen Datenbanken mit Delphi und Interbase
    gearbeitet und ich möchte einmal eine große Datenbank und Anwendung
    programmieren.<br>
    Es geht um eine Waren-Ver/Einkauf, Lagerbestand und Kundenverwaltung.</p>
    <p>Früher wollte ich eine Desktopversion schreiben und jedem Kunden und jedem
    Artikel etc. eine eigene Tabelleninstanz spendieren. Jetzt denke ich an wenige
    große Tabellen, aus denen man die benötigten Daten mit SQL, Stored Procedures
    und Views auslesen+bearbeiten kann.</p>
    <p>Größenordnungen: 100-500 Kunden, 100-500 Artikel, 100-200 Rechnungen pro
    Tag mit 1-50 Posten, 2-3 Client-Computer</p>
    <p>Ich denke da (grobe Vorstellung) z.B. an eine Tabelle, die für einen bestimmten Zeitraum gilt, z.B.
    ein Jahr, die den Verkauf von Ware enthält und in etwa folgende Struktur hat:</p>
    <p><i>Tabelle VKJournal:<br>
    LaufdNr, RechnungsNr, KundeNr, Datum, ArtikelNr, WareneinkaufPartieNr, Kolli, VKPreis,
    NochOffenerBetrag usw.</i></p>
    <p>Außerdem gibt es eine Tabelle, in der die Wareneinkäufe (also alle Artikel)
    vermerkt werden:</p>
    <p><i>WareneinkaufPartieNr,&nbsp; ArtikelNr, Kolli, EKPreis,</i></p>
    <p>und für den Wareneinkauf eine Quelle (also die Lieferanten):</p>
    <p><i>WareneinkaufPartieNr,&nbsp; Datum, LieferantenNr</i></p>
    <p>Täglich fallen also ca 1000 o.a. Buchungszeilen an, das wären dann ja
    7*1000*52 = 364000 pro Jahr.</p>
    <p>Bei der Eingabe der Kundennummer ins Rechnungsformular soll dann nach den
    offenen Rechnungen gesucht werden.<br>
    Das sieht dann etwa so aus:</p>
    <p>select sum(NochOffenerBetrag)<br>
    from vkjournal<br>
    where (kundeNr=:KUNDE) and (NochOffenerBetrag&lt;&gt;0);</p>
    <p>Es gibt also ständig select-Abfragen über lange Tabellen, die Bruchteile
    einer Sekunde dauern sollten, da viele der Kunden, denen Rechnungen geschrieben
    werden, diese unverzüglich bezahlen sollen.<br>
    Wie sieht es wohl mit der Geschwindigkeit dieser Abfragen aus ?<br>
    Wie machen das die Profis ?<br>
    Ich würde gerne so eine universale Tabelle benutzen und dann alles andere mit
    SQL, Stored Procedures und Views realisieren.<br>
    Kann ich aus den gespeicherten Daten eine VIEW Kundenkonten einrichten, die also
    aus den Verkäufen die offenen Rechnungen ermittelt, oder muß ich eine zweite
    Tabelle dazu führen, die direkt oder am Ende des Tages abgeglichen wird ? Die
    Lösung mit einer Tabelle ist natürlich einfacher.</p>
    <p>Gruß Marcus</p>

  • #2
    Hallo,

    bei 2..3 Client-Rechnern und dem genannten Datenvolumen sollten keine speziellen Performance-Tricks notwendig werden. Wenn das Feld <i>KundeNr</i> der Tabelle <i>vkjournal</i> ein INTEGER-Feld und auch ein Fremdschlüssel auf die Kunden-Tabelle ist, dürfte auch die SELECT-Abfrage für die Suche nach offenen Rechnungsposten sehr schnell ablaufen, da die Kundennummer die Anzahl der Datensätze in der Ergebnismenge bereits stark einschränkt.

    Dank der Multigenerationen-Architektur (Versioning) des InterBase sind auch längere Abfragen kein Problem, so dass eine täglich ausgewertete Hilfstabelle nicht notwendig sein sollte.

    Es ist jedoch immer eine gute Idee, die Theorie durch eine mit vielen Testdaten gefüllte Tabelle in der Praxis simuliert zu überprüfen

    Comment

    Working...
    X