Halihallo Marc
Ich möchte eine Suchfunktion realisieren, welche in der Regel eine hohe Zahl an Treffern liefern wird. D.h. ich muss eine Navigation durch die Ergebnissliste anbieten.
Der Recall ist ggf. zu gross.
Ist MySQL so smart das Resultat der ersten Query der Suchanfrage zu Cachen, so dass bei Aufruf der gleichen Anfrage (nur mit anderen LIMIT-Werten) nicht wieder erneut die DB befragt wird?
Nein, denn das würde gegen das Grundprinzip aller Datenbanken verstossen. Jede Abfrage
stellt eine momentane, vollständige Abbildung des Datenbestandes dar, die Vollständigkeit
wäre mit Caching nicht mehr gegeben. Ggf. wurden bereits Datensätze gelöst und diese
_dürfen_ nicht ausgegeben werden (Integrität). Ein derartiges Caching wie du es vor-
schlägst würde ich als Bug bezeichnen (obwohl es in deinem Fall sinnvoll wäre).
Oder kann man das steuern ?
IMHO nicht direkt.
Oder lohnt sich der Einsatz einer temporären Tabelle um z.B. die Keys aus dem ersten Result zu speichern, also das Caching selbst zu bauen?
Frage: Was willst du damit bezwecken? - Weniger intensive condition-searches (also
Selektion der "passenden" Datensätze), weniger Ressourcen, schnellere Abfragen, weniger
Speicherverbrauch... ?
bei dem einen oder anderen Fall macht eine temporäre Tabelle Sinn, aber ich denke das
dies stark davon abhängt, inwiefern du optimieren willst.
Oder gibt es andere Lösungsansätze ?
Die Datenbank wird einmal abgefragt und das Ergebnis in einer HEAP-Tabelle [1]
gespeichert. Den gesamten Datenbestand oder nur die Primary Keys in einer temporären
Datei speichern.
[1] http://www.mysql.com/doc/en/HEAP.html, die haben den Vorteil, dass sie auch
zwischen Verbindungen existent bleiben, im Gegensatz zu temporären Tabellen.
Viele Grüsse
Philipp
RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.