Einzelnen Beitrag anzeigen

Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#45

Re: Schnellste Insert Möglichkeit für eine DB?

  Alt 9. Mär 2010, 10:34
Hallo xzise,

zunächst einmal, diese Auftrennung in Nachname und Vorname, und die nachfolgende Kombination zumindestens bei den Schülern erscheint mir doch sehr obskur. Oder habe ich die Funktion als Index übersehen?

wenn ich Deine Sourcen auf die SQL-Relevanz verkürze bleibt nur noch das übrig:
Code:

    // Alle Kurse und Kurszuweisungen löschen, die nicht Hauptkurse sind
    EntferneZuSQL('Kurse', 'Hauptkurs <> 0');
   
    EntferneZuSQL('Kurszuweisungen', 'KursID IN (SELECT KursID FROM Kurse WHERE Hauptkurs <> 0)');
   
    // Und dann die Schüler auf obsolet setzen
    ExecSQL('UPDATE Personen SET Obsolet = -1 WHERE HauptKursID != 0');
   

    BeginTransaction;
Zunächst steht da ziemlich verloren ein einsames BeginTransaction, nur noch gefolgt von Datenmanipulationen aber ohne irgendeinen Datenbankbezug (was hab ich da übersehen?).

Und was macht EntferneZuSql ? Wenn ich das richtig verstanden habe, wird jedes mal auf der Datenbank eine wílde Datensammlung erzeugt, die dann wieder bereinigt wird? (Hauptkurs oder nicht)
Dieser "Datenmissbrauch" ist die Grundlage von Chaos-Programmen. Wenn man das Geschlecht einer Person bestimmen/dokumentieren will, dann braucht's ein Feld Geschlecht und keine Umwege über Vorname, Schuhgröße, Haarlänge und was für kreative Ideen da noch herum schwirren. (Übrigens, das der Titel bei Lehrer die ersten fünf Stellen des Namens belegt ist auch so eine Krücke die Fehler geradezu provoziert)

Da sollte das Konzept, das dahinter steht einmal überdacht werden.

Wenn es Dir darum geht, Dein Programm zu beschleunigen, dann solltest Du von diesem
Code:
 GeneriereDoppelFortschritt(i_cAnzahlSchritte...
Abstand nehmen, denn das ist ein echter Zeitfresser.

Zitat:
Aber die Frage die sich mir stellt, ist halt ob ich zwei Queries parallel laufen haben kann.
Das ginge, aber was soll es bringen? Die query die als erste startet, hat den Datenbestand mehr oder weniger exclusiv im Zugriff (kommt auf die dahinter liegende "Sperrungsphilosophie" an) die zweite muß dementsprechend warten. Wenn Du Zeit sparen willst, solltest Du Dir dein Programm einmal sehr kritisch anschauen, und vor allem die Frage stellen wofür das, was da gemacht wird, eigentlich gut ist.

gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat