Lavorando ora su una scheda vBulletin, che gira su MySQL 5.6.21 con il motore di tabella InnoDB. Esiste una query predefinita in vBulletin, che utilizza l'hint dell'indice su una colonna e allo stesso tempo utilizza l'indice fulltext su altre due colonne. La query sembraUSE INDICE e MATCH su un altro indice FULLTEXT restituisce l'errore "Impossibile trovare l'indice FULLTEXT corrispondente all'elenco di colonne"
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;
Questo dà errore
# 1191 - Impossibile trovare indice FULLTEXT corrispondenza l'elenco delle colonne
Rimozione USE INDEX
risolve il problema.
Questo non stava accadendo sull'implementazione MyISAM dell'indice FULLTEXT di sicuro, poiché questa è la query predefinita su vBulletin e funziona bene su tutte le schede.
È possibile che questa configurazione per InnoDB causi questo problema? Non abbiamo il controllo sulla query stessa, quindi cerchiamo un modo per risolvere il problema a livello di configurazione del server.
EDIT: SHOW Incluso CREATE TABLE postale
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
Non è necessario usare 'utilizzare index' per ricerca a testo integrale. Mysql sa che il tuo 'post.title, post.pagetext' sono impostati con indice di testo completo e altro se la colonna' thread.threadid' è index, optimizer farà il suo lavoro. –
@AbhikChakraborty Come accennato, questa è una query predefinita da vBulletin e non posso cambiarla. –
Ah, un altro motivo per evitare pacchetti di terze parti. Reclami con vBulletin. Nel frattempo, _might_ lavoro da fare 'ALTER TABLE post ENGINE = MyISAM;' –