AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi WHERE über alle Felder

WHERE über alle Felder

Ein Thema von Angel4585 · begonnen am 20. Apr 2006 · letzter Beitrag vom 21. Apr 2006
Antwort Antwort
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

Re: WHERE über alle Felder

  Alt 21. Apr 2006, 07:13
@Hansa: Es geht hier nicht um Zeitunterschiede von 1,2 Sekunden, wie Du so schön (aber falsch) süffisant angemerkt hast, sondern um drastische Geschwindigkeitsgewinne: Während die Suche über mit Hilfe eines Indexes, unabhängig von der Tabellengröße, in etwa konstant bleibt, wächst der Suchaufwand ohne Index linear: Doppelte Tabellengröße = Doppelte Suchzeit. Wenn man nur mit Tabellen von einigen Tausend Einträgen arbeitet, ist es wirklich egal, aber bei einigen Hunderttausend Einträgen macht sich das schon bemerkbar. Dann beträgt der Zeitunterschied etwa das 100 bis 1000-fache. Eine einfache Suche per Index ist in einigen 100 ms durchgeführt, während die sequentielle Suche ohne Index durchaus Minuten, wenn nicht sogar Stunden dauern kann.

Im Übrigen sind meinen Kunden Suchzeiten von 10 Sekunden nicht egal. Ein solches Schneckentempo erreiche ich höchstens bei Summierungen, ansonsten verlange ich von meiner DB, das die Suchergebnisse *sofort* erscheinen. Ein DB-Server sollte nicht suchen, sondern finden.

10 Sekunden...

Ich würde zwei Tabellen nehmen:
Aus einer Tabelle
T1:
int ID
string Name
string Feld1
string Feld2
string Feld3

werden zwei Tabellen
T2:
int ID
string Name

und
SearchFields:
int IDT2
int sfCode
string FieldValue

Ein Datensatz in T1 (1,'MyName','MyField1','MyField2','MyField3') wird auf ein Feld in T2 sowie drei Felder in SearchFields aufgeteilt:
T21,'MyName')
SearchFields:
(1,1,'MyField1')
(1,2,'MyField2')
(1,3,'MyField3')

Und eine Suche in einem der Felder reduziert sich dann auf das bereits beschriebene:
SQL-Code:
select *
  from T2 join
       SearchFields alias SF
          on SF.IDT2 = T2.ID
 where SF.FieldValue ='MySearch'
Mit einem Index auf den SearchFields.FieldValues hast Du eine Recherchemöglichkeit, die ohne Verzögerung das Ergebnis liefert.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04: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