phpbar.de logo

Mailinglisten-Archive

Suche in mehreren Tabellen

Suche in mehreren Tabellen

Ralf Geschke ralf at kuerbis.org
Die Apr 29 23:37:56 CEST 2003


Hallo !

Gegeben sind mehrere gleichartige Tabellen (identische Struktur,
nur durch den Namen unterschieden). 
Nun soll in diesen Tabellen gesucht werden, wobei die Anzahl
der Tabellen nicht immer gleich ist, d.h. diese wird vom 
Benutzer gewaehlt. 
Da die Tabellen mitunter gross werden koennen, werden 
auch entsprechend viele Eintraege gefunden, der Benutzer
soll letztlich in den Ergebnissen blaettern koennen. 
Und zu allem Ueberfluss muss das ganze auch noch halbwegs
performant ablaufen. 

Ich hab' mir ein paar Gedanken gemacht, wobei mir folgende
moegliche (und unmoegliche) Loesungen eingefallen sind:

- naheliegend, aber gruselig: Einfach mehrere SELECT-Anweisungen
abfeuern, d.h. pro Tabelle eine, die Ergebnisse anschliessend
client-seitig zusammenbringen, um das Blaettern in den 
Ergebnissen zu ermoeglichen. 
   -> Faellt als Loesung weg. Waere client-seitig ein grosser
Aufwand, auch bzgl. des verbrauchten Speicherplatzes, 
da keine Beschraenkung per LIMIT moeglich ist, sondern zuerst
immer alle Ergebnisse gelesen werden muessten. Ist nur
sinnvoll bei einer einzigen Tabelle, koennte hierfuer als Spezialfall
benutzt werden. 

- Nutzung von temporaeren Tabellen, Ueberfuehrung der Ergebnisse
einzelner Suchanweisungen in die temporaere Tabelle, anschliessendes
Auslesen per SELECT aus der temp. Tabelle.
   -> Schon besser, wobei die Anwendbarkeit von der Dauer der
Erstellung der temporaeren Tabelle sowie der Suche in jener abhaengt. 
LIMIT ist nutzbar, insgesamt wenig Aufwand auf der Client-Seite. 
Damit ist auch bereits der Nachteil beschrieben - der Aufwand
auf Datenbank-Seite ist recht hoch, pro Suche muessen evtl. mehrere
temporaere Tabellen angelegt werden, da diese ja nach Ablauf
der PHP-Anwendung wieder zerstoert werden, jedes Blaettern ist
damit genauso kostenintensiv wie die erste Suche. 
Ich habe dies mal ausprobiert mit nur wenigen Tabellen und wenigen 
Eintraegen - die Ergebnisse haben mich nicht ueberzeugt. 

- Verwaltung eigener temporaerer Tabellen bzw. Caching. Dabei
wuerde bei Bedarf eine Tabelle angelegt, die aus den fuer die
Suche relevanten Daten der anderen Tabellen besteht. "Bei Bedarf"
waere dabei noch festzulegen, koennte beispielsweise in regel-
maessigen Zeitabstaenden oder auch falls eine Suche gestartet wird
und die Tabelle aelter als x Minuten ist, angelegt werden. 
Die Suche erfolgt dann nur in dieser zusammengefuehrten 
Tabelle.
   -> Hiervon verspreche ich mir eine schnelle Suche, LIMIT
ist nutzbar. Der Nachteil waere wiederum hoeherer Aufwand
auf Client-Seite, notwendig ist eine Verwaltung der temporaeren 
Tabelle. Ebenfalls wird die Suche, bei der die Tabelle
erst erzeugt werden muss, vermutlich recht langsam, alle darauffolgenden
jedoch wieder schneller. Ist evtl. verschmerzbar. 

- Paralleles Schreiben der Daten in die Nutz- sowie eine Suchtabelle...
   -> Habe ich eigentlich nicht in Betracht gezogen, ist IMHO
keine schoene Loesung, client-seitig aufwendig und mit Modifikationen
des bestehenden Codes verbunden, gleiche Vorteile wie bei der
letzten Loesung. 

Wozu wuerdet Ihr tendieren? Gibt es weitere, respektive bessere Loesungen?

Beste Gruesse,
  Ralf

-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive