Bjoern: MATCH AGAINST - Eingrenzung

Hi,

ich suche nach einer Möglichkeit eine "unscharfe Suche" per "MATCH AGAINST" auf eine MySQL-Tabelle anzuwenden, sodass nur diejenigen Zeilen durchsucht werden, die über eine weitere Bedingung matchen.

SELECT id FROM [tabelle] WHERE key = [key] AND MATCH ([text]) AGAINST ('[searchstring]')

Die Tabelle kann mitunter 20 mio Zeilen umfassen, wobei aber durch die Eingrenzung nach [key] nur einige hundert Zeilen übrig bleiben.

Mit dem oben beschrieben Statement werden allerdings, alle Zeilen per MATCH AGAINST durchsucht, wodurch ich aus Perfromance-Gründen bisher mit LIKE arbeite und somit auf die unscharfe Suche verzichte.

Für Hinweise jeglicher Art wäre ich dankbar !

Gruß,
Björn

  1. Hi,

    SELECT id FROM [tabelle] WHERE key = [key] AND MATCH ([text]) AGAINST ('[searchstring]')

    Die Tabelle kann mitunter 20 mio Zeilen umfassen, wobei aber durch die Eingrenzung nach [key] nur einige hundert Zeilen übrig bleiben.

    Mit dem oben beschrieben Statement werden allerdings, alle Zeilen per MATCH AGAINST durchsucht

    Der Index, auf dem MATCH AGAINST arbeitet, wird nun mal fuer alle Datensaetze in der Tabelle angelegt, muss also wohl auch komplett "durchgefpluegt" werden, wenn du ihn zur Suche heranziehst.

    Das wird sich auch mit einem Subquery wohl nicht umgehen lassen - weil das keinen "eigenen" Volltext-Index hat, auf dem dann MATCH AGAINST suchen koennte.

    Hoechstens das Anlegen einer temporaeren Tabelle auf der Auswahl per key, dieser dann einen Volltext-Index verpassen - das koennte gehen. Aber das wird wohl kaum performanter sein, eher im Gegenteil - der Aufbau eines solchen Index ist extrem teuer.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“