在3列上添加FULLTEXT INDEX时,是在3列上添加1个单个索引还是在3个单独的索引上添加?
我问这个问题,因为此刻我正在像这样使用FULLTEXT:
ALTER TABLE myTable ADD FULLTEXT all3colsIndex (col1,col2,col3);
SELECT * FROM myTable WHERE MATCH (col1, col2, col3) AGAINST ('word');
我刚刚在搜索界面中添加了一个用户选项,用户可以在其中从搜索中删除其中一列。因此,我能够在不丢失索引的情况下做到这一点,而我仅使用3列中的2列:
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');
}
还是我必须在两列以及三列上创建一个新的FULLTEXT索引?
ALTER TABLE myTable ADD FULLTEXT all3colsIndex (col1,col2,col3);
ALTER TABLE myTable ADD FULLTEXT 2colsIndex (col1,col2);
最佳答案
浏览CREATE FULLTEXT INDEX手册,它表明您可以通过重复column_name
这样来指定多列:
CREATE FULLTEXT INDEX ON table_name (column_name1 [...], column_name2 [...]) ...
有了这些信息,我将假定它在3列中创建一个索引。此外,我假设它在关于复合索引的从左到右规则下可以工作(我将通过检查以下语句的执行计划来验证这一点)。因此,必须按该顺序选择
(col1, col2, col3)
上的复合索引(SELECT col1, col2 ...
)。如果要调用col2
,它将不使用索引。关于mysql - 多列上的FULLTEXT INDEXES如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12361804/