在3列上添加全文索引时,是在3列上添加1个索引,还是添加3个单独的索引?

我之所以这样问,是因为目前我使用的全文是这样的:

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');
}

或者我需要在这两列以及这三列上创建一个新的全文索引吗?

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 [...]) ...

有了这个信息,我会假设它创造了一个single index across 3 columns.此外,我假设它在复合索引方面按照从左到右的规则工作(我将通过判断以下语句的执行计划来验证这一点).因此,必须按该顺序 Select (col1, col2, col3)上的综合指数才能使用它(SELECT col1, col2 ...).如果您拨打col2,它将不会使用索引.

Database相关问答推荐

如何在Ballina中的事务失败时回滚缓存插入操作

MongoDB 中的 OVER PARTITION 类似功能

获取总和列的比率

数据库设计:文件路径的首选字段长度

如何在 SQL Server 中将索引从一个表复制到另一个表

502 是数据库错误的适当状态代码吗?

使用 SQLAlchemy Core 批量插入列表值

授予对具有特定前缀的多个表的权限

设置默认数据库连接 Rails

免费的便携式数据库有哪些?

在 PostgreSQL 中使用 pg_notify(text, text) 监听/通知

Redis: Get key and value on expiration

在数据库中使用数组是不好的设计吗?

在单个 postgres 查询中多次调用 `now()` 是否总是给出相同的结果?

使用默认路径中的文件创建数据库

ORM 还是Vietnam of Computer Science吗?

PostgreSQL 的示例数据库

用 SQL 进行条件插入?

最佳用户角色权限数据库设计实践?

Phonegap 离线数据库