2010-12-18 5 views
0

Ich habe eine db mit zwei Tabellen: Seiten und Tags, die wie folgt strukturiert sind:Fulltextsuchung vs id Suchgeschwindigkeit mit MySQL

  • Seiten: page_id, page_text, page_tags (ca. 60.000 Datensätze jederzeit)
  • tags: tag_id, tag_text
    (ca. 300.000 Datensätze jederzeit)

Jede Seite ist mit einer Anzahl von Tags (unter Verwendung der page_tags Spalte) zugeordnet ist. Meine Frage ist über pages.page_tags und insbesondere, welcher Weg ist am effizientesten für die Speicherung der oben genannten Assoziation?

  1. Eine Möglichkeit zur Volltextindex page.page_tags sein würde und speichern Sie den Text der zugehörigen Variablen gibt, zum Beispiel: Apfel orange Frucht Marmelade

  2. eine zweite Art und Weise auch Seite Volltextindex sein würde. page_tags sondern speichert die IDs der zugehörigen Variablen zum Beispiel: 132 14 24192 14

  3. einen dritten Weg eine dritte Tabelle zu machen wäre: tag_assoc, wie folgt aufgebaut:

tag_assoc: page_id, tag_id

(wo für jeden Tag in einer Seite wird es mit einem Datensatz vorhanden sind sowohl die IDs der Seite und dem Tag)


, die Sie tun denken, ist die effizienter Weg? Vor allem in Bezug auf:

  • A) Suchgeschwindigkeit für Anfragen wie: "hol mir jede Seite, die Tags hat: Apfel und Orange"
  • B) die Aktualisierung der Tabellen. Eine neue Seite könnte ziemlich oft in der Datenbank ankommen. Das bedeutet, wenn ein neues -Tag in einigen dieser Seiten gefunden wird, das nicht in der Tag-Tabelle existiert, muss ich es dort hinzufügen.

Wenn keiner von ihnen, was würden Sie vorschlagen?

+0

Danke Jungs. Beide Antworten waren gleichermaßen hilfreich, so dass ich nur die Antwort akzeptieren konnte, die schneller beantwortet wurde – Alexandros

Antwort

0

Wenn Sie Volltext-Indizes verwenden ich etwas als solche

Tabelle 1 tun würde - Seite

pageid 
name 
date 
category 
... etc etc other page meta data here 

Tabelle 2 - page_fulltext

pageid 
page_title_fulltext 
page_body_fulltext 

Nehmen Sie zum Beispiel Seite 1 hat page_body_fulltext " die schnellen braunen Fuchssprünge des faulen Hundes " Seite 2 hat page_body_fulltext" die schnellen roten Fuchssprünge des faulen braunen Hundes "

tun eine Volltextsuche können Sie einzelne Tag Worte finden, sondern auch genaue Strings

dh Sie Schlüsselworte „schnell“ oder „braun“ oder „Fuchs“

Aber wenn jemand sucht finden finden " schneller brauner Fuchs "das kannst du auch machen.

In Ihrem Beispiel würden Sie wahrscheinlich nach allen 3 Wörtern suchen und beide Seiten zurückbekommen, was falsch wäre.

auch nicht mysql ein großer Job Volltextsuche der Handhabung, was Sie vorschlagen, ist im Grunde eine ähnliche Version von dem, was MySQL sehr gut tun würde, auf seinem eigenen

so in der 2-Instanz, die Sie oben skizzierten A) Suchgeschwindigkeiten wäre genial wie es ist, was mysql nativ sehr gut macht B) mein Weg viel schneller, da Sie nicht die Existenz jedes Schlüsselworts überprüfen müssen, das Sie einfügen. Führen Sie einfach ein Standardupdate/-Insert durch und lassen Sie mysql den Schmerz der Textsuche für Sie behandeln.

meine Firma des Verfahrens unter Verwendung von i beschrieben und es funktioniert sehr gut ...

meint auch die Seite Text und Seitentitel in eigenen Volltext Spalten haben Sie die zusätzlichen Bonus erhalten Lage zu sein, Seiten mit Titeln zu punkten Ihre Keywords sind höher als bei Seiten mit Text, der dieselben Keywords enthält.

0

Diese Seite, obwohl ein bisschen alt, enthält anständige Informationen über verschiedene Ansätze zum Taggen von Schemas und wie jeder Effekt Leistung. Wie Sie das Problem angehen, hängt weitgehend von Ihrer aktuellen Anzahl an Datensätzen und davon ab, wie sich dieser Betrag in Zukunft ändern wird.

Die Schemata: http://www.pui.ch/phred/archives/2005/04/tags-database-schemas.html

Ihre Leistung: http://www.pui.ch/phred/archives/2005/06/tagsystems-performance-tests.html