When adding a FULLTEXT INDEX on 3 columns, does that add 1 single index on 3 columns, or does it add 3 separate indexes?
I ask this, because at the moment I’m using FULLTEXT like this:
ALTER TABLE myTable ADD FULLTEXT all3colsIndex (col1,col2,col3);
SELECT * FROM myTable WHERE MATCH (col1, col2, col3) AGAINST ('word');
I have just added a user option to my search interface where the user can remove one of the columns from the search. So am I able to do this without losing the index, where I’m only using 2 of the 3 columns:
ALTER TABLE myTable ADD FULLTEXT all3colsIndex (col1,col2,col3);
If (UserOptionRemoveCol == "selected") {
SELECT * FROM myTable WHERE MATCH (col1, col2) AGAINST ('word');
} else {
SELECT * FROM myTable WHERE MATCH (col1, col2, col3) AGAINST ('word');
}
Or would I have to create a new FULLTEXT index on the two columns, as well as the three?
ALTER TABLE myTable ADD FULLTEXT all3colsIndex (col1,col2,col3);
ALTER TABLE myTable ADD FULLTEXT 2colsIndex (col1,col2);
Glancing over the manual for CREATE FULLTEXT INDEX, it indicates that you are able to specify multiple columns by repeating the
column_nameas such:Given this information, I would assume it creates a single index across 3 columns. Further, I’m assuming that it works under the left-to-right rule with regards to composite indexes (I would verify this by checking the execution plan for the following statements). Therefore, a composite index on
(col1, col2, col3)would have to be selected in that order for it to be used (SELECT col1, col2 ...). If you were to callcol2it would not use the index.