mysql – 多列上的FULLTEXT INDEXES如何工作?

在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,则不会使用索引.

上一篇:如何使用索引和值迭代1d NumPy数组


下一篇:python-对Pandas DataFrame使用逻辑索引或布尔索引的正确语法是什么?