Hallo!
Ich bin jetzt nicht _der_ Datenbank Speziallist, aber warum die Tabelle jedesmal löschen? Leer sie doch einfach mittels DELETE FROM xyz. Mysql leert, wenn ich es richtig verstanden habe, bei einem Statement wie dem obigen gleich die ganze Tabelle auf einmal, und nicht einzeln. Auf diese Weise müsstest du die tabelle auch nicht jedesmal wieder neu anlegen.
Das aanlegen kostet glaub ich so gut wie nichts, und genau deshalb verwende ich eien Temporäre Tabelle, mit Beendigung der Verbindung, also am Ende des PHP-Scriptes, wird die Tabelle automatisch vom mysqld gelöscht. Wenn ich eine Tabelle nur leere, udn ime rin die gleiche Tabelle schreibe, dann habe ich das Problem, wenn 2 Leute gleichzeitig suchen, kann es sein das die sich bei der Sache ins Gehege kommen, womöglich bekommt der eien die Ergebnisse des anderen, oder die Ergebnisse des anderen werden gelöscht bevor sie ausgegeben wurden... und außerdem ist das löschen von Datensätzen erheblich langsamer als das löschen einer Tabelle, und vermutlich auch das Anlegen. Man könnte das evtl mit einer individuellen ID für jeden User in dieser Tabele umgehen, aber das wäre nochmal mehr Rechen-Aufwand, und dazu wird die HEAP-Tabelle im RAM unnötigerweise größer, und je größer desto langsamer wird das, auch wenn man es hier vermutlich nicht merken würde. Aber so ganz sicher bin ich mir heir auch noch nicht, vor allem bin ich mir noch nicht sicher ob ich überhaupt HEAP-Tabellen verwenden soll, denn da kann ich keien Index anlegen, den ich dann zum sortieren verwenden kann. Aber auf der anderen Seite dauert das Sortieren von 1000 Datesätzen ohne Index unter 1/1000 Sekunde, also was will man mehr? Außerdem glaube ich, das die HEAP-Tabelle an sich einige Vorteile des Index aufwiegt, vor allem brauche ich jede Tabelle nur ein mal, was bei einem Index natürlich Quatsch ist. Ich denke so wie ich es mache ist es gar nicht so schlecht, wie gesagt ist das ganze erstaunlich schnell. Die Engstelle bleibt jetzt eigentlich nur die Volltext-Suche, denn wennan hier einen Suchstring erstmalig eingibt, dauert die Suche tierisch lang, 10-20 Sekunden. Erst ab der 4. Wiederholung desselben Strings kommen dabei Zeiten um 0,1 und 0,3 Sekunden raus.
PS: Wie lange arbeitest du jetzt eigentlich schon an der Selfsuch, ich habe die letzten Threads dazu mitgelesen und hab das Gefühl das du verdammt viel über SQL gelernt hast in der doch eigentlich kurzen Zeit.
Ja, das stimmt, vor allem dank der Postings von Michael Schroepl. Außerdem habe ich einige Kapitel in der Doku jetzt ein paar mal gelesen ;-) Wobei ich noch lange nicht alles verstanden habe, aber es wird langsam. Das wichtigste ist wirklich die Datenstruktur und die Abbfragen, da ist mit großem Abstand das meiste Potential an Verbesserung zu holen, und das ist als Anfänger nicht ganz so einfach finde ich, vor allem da ich Dinge wie Temporäre Tabellen, oder andere Tabellentypen vorher nie in Erwägung gezogen habe.
Nächte Woche will ich nochmal einen Versuch mit MySQL 4 wagen, zur Not halt unter Windows, um einfach mal zu sehen, was da noch für Potoentiel ist, z.B. wenn ich nicht mehrere Match against mit AND verknüpfe, sondern direkt die + aus dem Suchstring verwende, weiß noch nicht wie sich das auswirkt, außerdem kann ich einfach erfahren, wieviele Ergebnisse die Abfrage ohne LIMIT gebracht hätte, also durchaus interessante Sachen. Mal schaun wie das so wird. Aber diese Suche ist natürlich eine sehr spezielle Anwendung, für viele andere Bereiche muß ich nochmal genauso viel lernen, es gibt nicht umsonst DB-Spezialisten, die das Berfufsmäßig machen, denn das ist wirklich nicht so trivial wie man am Anfang denkt.
Respekt.
Danke ;-)
Grüße
Andreas