Announcement

Collapse
No announcement yet.

TTABLE schneller als TQUERY ??

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

  • TTABLE schneller als TQUERY ??

    Hallo an alle Leser !

    Im Rahmen einer Performance-Analyse nehme ich in eine
    einfache Tabelle mit 8 Spalten in einer For-Schleife 100 Datensätze
    auf. Dazu verwende ich:

    (A) eine TTABLE-Komponente und
    (B) eine TQUERY-Komponente

    Die Messung findet einfach mit GETTICKCOUNT jeweils vor und
    nach der Schleife statt. Mit DBISAVECHANGES und TABLE.CLOSE wird
    gewährleistet, dass der CACHE nicht zu viel verfälscht.

    Das Ergebnis hat mich allerdings überrascht:

    TTABLE benötigt mit "APPEND/POST" ca. 300 ms.
    TQUERY mit "INSERT INTO" ca. 1700 ms.
    Bei Verwendung von SQL-Parametern und PARAMBYNAME in der
    TQUERY-Komponente benötigt (B) ca. 1500 ms.

    Als Datenbank verwende ich in beiden Fällen ACCESS 97 mit
    JET-Engine 3.5 und BDE.

    FRAGE(N):
    Ist dieser relativ grosse Unterschied speziell in der Implementierung
    der ACCESS-Anbindung der BDE begründet oder ist die BDE allgemein
    TTABLE-lastig ?

    Kann dieser Unterschied auch auf andere Datenbanken übertragen werden
    (z.B. ORACLE, INTERBASE) ??

    Oder ist TTABLE hier nur schneller als TQUERY weil ACCESS eine
    Desktop Datenbank ist und ist das ganze bei Oracle genau umgekehrt ??

    Ich mache mich nun zu ORACLE-Tests auf, dessen Ergebnisse ich baldigst
    nachreiche.

    Für tiefsinnige Kommentare allseits dankbar...

    Adi

  • #2
    Hallo,

    mit dieser Frage sind wir bei den grundlegenden Unterschieden zwischen einer datensatzorientierten Desktop-Datenbank und einer mengenorientierten SQL-Datenbank. Die Sprache SQL ist dafür ausgelegt, Datenmengen auf einem SQL-Server zu bearbeiten. Im Gegensatz dazu verwenden Desktopdatenbank wie Paradox, dBASE oder ACCESS einen Datensatzzeiger auf den jeweils aktuellen Datensatz. Immer dann, wenn mit SQL auf eine Desktopdatenbank (die selbst kein SQL spricht) zugegriffen wird, muss ein Übersetzer die SQL-Anweisungen in die nativen Funktionen übersetzen. Diese Übersetzung benötigt Zeit, wobei allerdings der Zeitbedarf für die Übersetzung gegenüber dem Zeitbedarf für die Ausführung gering ist. Der Grund für die lange Ausführungszeit liegt darin, das bei SQL die Datenbanktabelle als Menge betrachtet wird und der Datensatzzeiger jedesmal aus Neue positioniert werden muss. Eine TTable muss in der Schleife jedoch seine Datensatzzeigerposition nur um den Wert 1 erhöhen und ist in diesem Fall generell schneller als TQuery.

    Anders sieht die Sache bei SQL-Datenbanken aus. Hier muss TTable automatisch alle Aufrufe in SQL übersetzen. Allerdings ist auch hier der Zeitbedarf für die Übersetzung gegenüber dem Zeitbedarf für die Ausführung gering - so das zwischen TTable und TQuery bei geeigneter Konfiguration (kleine Datenmengen) kaum Unterschiede festzustellen sind. Denn sowohl bei TTable (die in SQL übersetzt) als auch bei TQuery (die direkt SQL verwendet) arbeitet der SQL-Server die gleichen Arbeitsschritte ab

    Comment

    Working...
    X