Hi Leute,
ich habe eine InnoDB-Tabelle, die sieht folgendermaßen aus:
ID: Int, primary key
link: text
tag: text
comment: text
datetime: timestamp
subject: text
deleted: bool
Hier werden zu bestimmten Themengebieten (subjects) Links gespeichert (link), getaggt (tag) und mit einem Kommentar (comment) versehen. Gelöschte Einträge werden nur als gelöscht markiert (deleted), nicht tatsächlich gelöscht.
Normalisierung ist mir in dem Fall unwichtig, da es für den Kern der Frage keine Rolle spielt.
Jetzt gibt es zwei Suchfelder. Einmal die Auswahl eines Subjects, das muss dann ein voller Treffer sein und zweitens einen freien Suchtext. Der Suchtext wird an Leerzeilen getrennt und dann auf die Spalten tag und comment losgelassen.
Beispiel: Themengebiet „Technik“, Suche nach „Biometrie Fingerabdruck“
Im SQL sieht das dann so aus:
SELECT ID, link, tag, comment, datetime, subject
FROM links
WHERE deleted=0
AND subject='Technik'
AND (tag LIKE '%Biometrie%' OR comment LIKE '%Biometrie%')
AND (tag LIKE '%Fingerabdruck%' OR comment LIKE '%Fingerabdruck%')
ORDER BY datetime DESC, subject, tag
Soweit so gut. Das geht auch alles, aber die Frage ist jetzt, wie ich die Indizierung mache.
Durch diese verschachtelten Unds/Oders bin ich nicht ganz klar, wie die Indizes optimalerweise aussehen müssten.
Für Hinweise bin ich dankbar.
Herzlichst,
Günther