Y a t'il un moyen d'optimiser un order by sur une recherche full text ?
J'ai une table de référence toute simple qui contient la clé vers un élément, et son contenu indexer en full text. Cette table fait plus de 800mo et contient a peu pres 1,5millions d'enregistrements.
mon my.cnf a les paramètres suivant :
ft_min_word_len = 3
ft_max_word_len = 32
Lorsque je fait une requete full text SANS ORDER BY sur cette table, elle s'execute en 0,0005s :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 CREATE TABLE IF NOT EXISTS `t_news_index` ( `c_news_link` int(10) unsigned NOT NULL auto_increment, `c_news_index_keyword` text NOT NULL, PRIMARY KEY (`c_news_link`), FULLTEXT KEY `c_tags` (`c_news_index_keyword`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2912861 ;
La meme requete avec un ORDER BY met 13,7788s
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT SQL_NO_CACHE c_news_link, c_news_index_keyword FROM t_news_index WHERE MATCH ( t_news_index.c_news_index_keyword ) AGAINST ( 'une recherche sans order by qui fait peur' IN boolean MODE ) LIMIT 5
Cette requête est normalement accompagné de nombreuses jointures, mais j'ai volontairement simplifier car le problème viens essentiellement de la.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SELECT SQL_NO_CACHE c_news_link, c_news_index_keyword FROM t_news_index WHERE MATCH ( t_news_index.c_news_index_keyword ) AGAINST ( 'une recherche avec order by qui fait peur' IN boolean MODE ) ORDER BY c_news_link LIMIT 5
Pensez vous qu'il y est une solution ?
(mon vrai order by se fait normalement sur les tables jointes, par sur cette table)
Merci,
Partager