一尘不染

多列上的FULLTEXT INDEXES如何工作?

sql

在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);

阅读 167

收藏
2021-03-10

共1个答案

一尘不染

浏览手册CREATE FULLTEXT INDEX,它表明您可以通过重复column_name这样来指定多个列:

CREATE FULLTEXT INDEX ON table_name (column_name1 [...], column_name2 [...]) ...

有了这些信息,我就可以假设它 在3列中 创建了 一个索引
。此外,我假设它在关于复合索引的从左到右规则下可以工作(我将通过检查以下语句的执行计划来验证这一点)。因此,(col1, col2, col3)必须按该顺序选择复合索引on才能使用(SELECT col1, col2 ...)。如果要调用col2它将不使用索引。

2021-03-10