Thema: Delphi WHERE über alle Felder

Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

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

Re: WHERE über alle Felder

  Alt 20. Apr 2006, 23:27
Ich würde mal sagen, das das ein gutes Beispiel für ein falsches Tabellendesign (in Bezug auf die Abfrageanforderung) ist.
Damit ein DB-Server nicht unnötig ausgebremst wird, sollten die durchzusuchenden Felder indiziert sein. Falls ein 'LIKE' Operator verwendet werden muss, sollte kein Escape-Zeichen *vor* dem Suchstring auftreten, um die Suche mit Hilfe eines Indexes zu ermöglichen.
Dazu kann man mehrere Indexe erstellen, eines für jedes durchzusuchende Feld, oder man befolgt die die Grundregeln des DB-Designs, und erstellt eine separate Tabelle 'SearchFields' mit drei Feldern: Einem Link zum Masterdatensatz in der ursprünglichen Tabelle, Einem mit dem Inhalt, sowie eventuell noch Einem, das die Unterscheidung ermöglicht, ob es sich um das ursprüngliche 'Feld1', 'Feld2'... handelt.

Dann reduziert sich die Abfrage auf
SQL-Code:
select *
  from Tabelle1 alias T1 join
       SearchFields alias SF
         on SF.IDMaster = T1.ID
 where SF.Value = 'FooBar%'
Das ist bei einem Index auf SearchFields.Value optimal schnell.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat