gpt4 book ai didi

mysql - 在另一个 FULLTEXT 索引上使用 INDEX 和 MATCH 给出错误 "Can' t 找到与列列表匹配的 FULLTEXT 索引”

转载 作者:可可西里 更新时间:2023-11-01 06:51:08 34 4
gpt4 key购买 nike

现在在 vBulletin board 上工作,它运行在带有 InnoDB 表引擎的 MySQL 5.6.21 上。 vBulletin 中有一个默认的查询,它在一列上使用索引提示,同时在另外两列上使用全文索引。查询看起来像

SELECT postid, post.dateline FROM post AS post 
USE INDEX (threadid)
INNER JOIN thread AS thread ON(thread.threadid = post.threadid)
WHERE MATCH(post.title, post.pagetext) AGAINST ('+atlantic +blue +tang' IN BOOLEAN MODE)
AND thread.threadid = 170467;

这给出了错误

#1191 - Can't find FULLTEXT index matching the column list

删除 USE INDEX 可解决问题。

这肯定不会发生在全文索引的 MyISAM 实现上,因为这是 vBulletin 上的默认查询并且它在所有板上运行良好。

这是否可能是 InnoDB 的一些配置导致了这个问题?我们无法控制查询本身,因此正在寻找一种方法来解决服务器配置级别的问题。

编辑:包含 SHOW CREATE TABLE 帖子

CREATE TABLE `post` (
`postid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`threadid` int(10) unsigned NOT NULL DEFAULT '0',
`parentid` int(10) unsigned NOT NULL DEFAULT '0',
`username` varchar(100) NOT NULL DEFAULT '',
`userid` int(10) unsigned NOT NULL DEFAULT '0',
`title` varchar(250) NOT NULL DEFAULT '',
`dateline` int(10) unsigned NOT NULL DEFAULT '0',
`lastedit` int(10) unsigned NOT NULL DEFAULT '0',
`pagetext` longtext NOT NULL,
`allowsmilie` smallint(6) NOT NULL DEFAULT '0',
`showsignature` smallint(6) NOT NULL DEFAULT '0',
`ipaddress` varchar(15) NOT NULL DEFAULT '',
`iconid` smallint(5) unsigned NOT NULL DEFAULT '0',
`visible` smallint(6) NOT NULL DEFAULT '0',
`attach` smallint(5) unsigned NOT NULL DEFAULT '0',
`infraction` smallint(5) unsigned NOT NULL DEFAULT '0',
`reportthreadid` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`postid`),
KEY `userid` (`userid`),
KEY `threadid` (`threadid`,`userid`),
KEY `dateline` (`dateline`),
FULLTEXT KEY `title` (`title`,`pagetext`)
) ENGINE=InnoDB AUTO_INCREMENT=1634030 DEFAULT CHARSET=utf8

最佳答案

http://sqlfiddle.com/#!9/21fa5/3

因为你强制 mysql 服务器 USE INDEX (threadid)。服务器无法为您执行 MATCH。因为要执行全文搜索,服务器必须使用您的全文索引title

这就是为什么你应该从查询中删除 USE INDEX (threadid) 并允许 MySQL 服务器优化执行本身,或者添加 title 索引,如 USE INDEX (threadid,title)

更新 我同意你的看法,这很奇怪:http://sqlfiddle.com/#!9/e363e/1

如果表类型是 MyISAM,即使您 USE INDEX (threadid) 查询也能正常工作,但在我看来它更像是使用 MyISAM 的一些特性。当我使用 USE INDEX 时,我必须非常确定我在做什么。因此,即使它适用于 MyISAM,如果这是我喜欢的方式,我更愿意设置 USE INDEX (threadid,title)

请记住,对于以前版本的 MySQL 甚至 5.5,全文搜索对 InnoDB 不起作用;-)

关于mysql - 在另一个 FULLTEXT 索引上使用 INDEX 和 MATCH 给出错误 "Can' t 找到与列列表匹配的 FULLTEXT 索引”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29692510/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com