Mailinglisten-Archive |
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