Arbeiten jetzt auf einem vBulletin-Board, das auf MySQL 5.6.21 mit InnoDB-Tabellen-Engine ausgeführt wird. Es gibt eine Standardabfrage in vBulletin, die den Indexhinweis für eine Spalte verwendet und gleichzeitig den Volltextindex für zwei weitere Spalten verwendet. Die Abfrage sieht aus wieUSE INDEX und MATCH auf einem anderen FULLTEXT-Index gibt den Fehler "Kann FULLTEXT-Index nicht finden, die die Spaltenliste entspricht"
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;
Dieser Fehler
# 1191 gibt - Kann nicht FULLTEXT- Sions die Spaltenliste
Entfernen USE INDEX
löst das Problem finden.
Dies geschah nicht auf MyISAM Implementierung von FULLTEXT Index sicher, da dies die Standardabfrage auf vBulletin ist und es läuft auf allen Boards.
Ist es möglich, dass dies eine Konfiguration für InnoDB ist, die dieses Problem verursacht? Wir haben keine Kontrolle über die Abfrage selbst und suchen nach einer Möglichkeit, das Problem auf der Serverkonfigurationsebene zu lösen.
EDIT: Eingeschlossen SHOW CREATE TABLE Post
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
Sie brauchen nicht 'zu verwenden zu verwenden index' für Volltextsuche. Mysql weiß, dass Ihr 'post.title, post.pagetext' mit einem Volltextindex und mehr eingerichtet wird, wenn die Spalte' thread.threadid' index ist, der Optimizer wird seine Aufgabe erfüllen. –
@AbhikChakraborty Wie bereits erwähnt, ist diese Standardabfrage von vBulletin, und ich kann es nicht ändern. –
Ah, ein weiterer Grund, Pakete von Drittanbietern zu meiden. Beschweren Sie sich bei vBulletin. Inzwischen _might_ es einiges zu tun 'TABLE Post ENGINE = MyISAM ALTE;' –