phpbar.de logo

Mailinglisten-Archive

Wie gestaltet man diese Abfrage ?

Wie gestaltet man diese Abfrage ?

Andreas Müller mysql at universalware.de
Don Okt 20 11:01:16 CEST 2005


Hallo Christoph,
Hallo alle anderen,

für so ein Suchproblem gibt es mit realtionalen Datenbanken keine
allgemeingültig sinnvolle Lösung.
Der bisherige Lösungsansatz ist ja nicht schlecht das über JOINs von
Tabellen zu lösen und noch dazu sehr performant.
Bei deiner Idee Christoph ist die Query nicht optimierbar und es läuft immer
auf einen full table scan hinaus. Nochdazu CPU intensive String suchen.

Die Lösung mit JOINs für AND Verknüpfungen würde ich vorziehen wenn man die
Anzahl der Suchbegriffe so beschränken kann das nicht mehr als 30 Tabellen
(ich glaube per default kann MySQL 32 Tabellen pro Query) verwendet werden.

Wenn man die Query noch etwas umschreibt sieht sie dann so aus:

SELECT b.*
FROM tbl_benutzer b
INNER JOIN tbl_suchbegriffe s1 ON s1.benutzerid=b.benutzerid AND
s1.suchbegriff = <gesuchter_begriff_1>
INNER JOIN tbl_suchbegriffe s2 ON s2.benutzerid=b.benutzerid AND
s2.suchbegriff = <gesuchter_begriff_2>
INNER JOIN tbl_suchbegriffe s3 ON s3.benutzerid=b.benutzerid AND
s3.suchbegriff = <gesuchter_begriff_3>
...

Diese Query lässt sich ja nun ganz einfach generieren weil pro gesuchtem
Begriff einfach eine Zeile dazukommt.
Der Optimizer fängt nun mit dem JOIN an wo die Index Statistik für den
Begriff die kleine Anzahl Datensätze liefert. Daher ist die Abfrage auch
richtig schnell.

Gruß,
Andreas


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


php::bar PHP Wiki   -   Listenarchive