AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Abfrage: Ist Datensatz bereits vorhanden?
Thema durchsuchen
Ansicht
Themen-Optionen

Abfrage: Ist Datensatz bereits vorhanden?

Ein Thema von BenneX · begonnen am 20. Jul 2014 · letzter Beitrag vom 23. Jul 2014
 
Dejan Vu
(Gast)

n/a Beiträge
 
#18

AW: Abfrage: Ist Datensatz bereits vorhanden?

  Alt 20. Jul 2014, 19:26
Wie soll denn der Datenbankserver die Anzahl der Datensätze ermitteln, ohne die Tabelle bzw. den Index komplett zu durchlaufen?
Bei Verwendung des SQL-Befehls Count muß er das gewiß.
Natürlich nicht.
Nehmen wir ein stinknormales RDBMS. Tabellen und B-Tree Index (ist am gebräuchlichsten).
Dann haben wir 3 Fälle, wie ein 'COUNT(*) WHERE field = :foo' ermittelt wird.
  1. Index auf 'field' vorhanden. Die Einträge sind sortiert vorhanden im Index. Das RDBMS findet den 1.Eintrag der WHERE - Bedingung. Da es sich um eine Äquivalenz ('=') handelt, zählt man einfach die Einträge 'rechts' vom gefundenen Eintrag, die gleich sind ('Index-Seek').
  2. Anderer Index vorhanden, der 'field' enthält. Das RDBMS liest den Index ein, was wesentlich schneller geht und rennt sequentiell durch, um alle Records mit der Bedingung zu finden. ('Index Scan').
  3. Kein Index vorhanden. Das RDBMS muss die gesamte Tabelle durchlaufen ('Table Scan').
In jedem der drei Fälle gibt es noch Optimierungsmöglichkeiten, je nach Feld- und Indegröße sowie WHERE-Bedingung. Ist die Tabelle sehr klein, kann ein Table-Scan schneller sein, als eine Index-Suche, das entscheidet der Optimizer. mySQL kennt andere Indexstrukturen, die sich sicherlich für den einen oder anderen Fall besser eignen, aber im Groben wird selbst SQLite das so handhaben, wie beschrieben. Das ist ja banale Algorithmik.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz