Sorry for the late check, but don't you make a Cartesian join against these three tables?
SELECT Artist.* FROM Artist, Band, Instrument WHERE MATCH (Artist.name) AGAINST ('mysearchterm') OR MATCH (Band.name) AGAINST ('mysearchterm') OR MATCH (Instrument.name, Instrument.description) AGAINST ('mysearchterm');
Assuming the database contains 100 ranges, 10 instruments and 500 artists, you are browsing 500,000 rows.
I would expect to see something like that you have a database where Artist belongs to the same group and plays one instrument:
SELECT Artist.* FROM Artist, Band, Instrument WHERE Artist.band_id = Band.id and Artist.instrument_id = Instrument.id and (MATCH (Artist.name) AGAINST ('mysearchterm') OR MATCH (Band.name) AGAINST ('mysearchterm') OR MATCH (Instrument.name, Instrument.description) AGAINST ('mysearchterm'));
Gsp
source share