Bonjour,

J'ai de très grosses tables search_wordmatch et search_wordlist c'est pourquoi je cherche la meilleure solution pour effectuer cette requete :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
SELECT m.word_id 
				FROM phpbb_search_wordmatch m, phpbb_search_wordlist w 
				WHERE w.forumid = 5021
          AND w.word_text IN ('ardente', 'bref', 'cause', 'cest', 'effectivement', 'euh', 'inspirant', 'plus', 'très', 'une', 'vivifiante')
          AND m.forumid = w.forumid  
					AND m.word_id = w.word_id 
				GROUP BY m.word_id 
				HAVING COUNT(m.word_id) > 1636;
Elle met 13 secondes à s'exécuter sur mon dédié.

Description des tables :
phpbb_search_wordlist
1 240 649 enregistrements MyISAM latin1_swedish_ci 68,9 Mo

phpbb_search_wordmatch 4 159 965 enregistrements MyISAM latin1_swedish_ci 152 Mo

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
 
CREATE TABLE `phpbb_search_wordlist` (
  `word_text` varchar(50) character set latin1 collate latin1_bin NOT NULL default '',
  `word_id` mediumint(8) unsigned NOT NULL auto_increment,
  `word_common` tinyint(1) unsigned NOT NULL default '0',
  `forumid` int(9) NOT NULL default '0',
  PRIMARY KEY  (`word_text`,`forumid`,`word_id`),
  KEY `word_id` (`word_id`),
  KEY `forumid` (`forumid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=211837 ;
 
 
 
CREATE TABLE `phpbb_search_wordmatch` (
  `post_id` mediumint(8) unsigned NOT NULL default '0',
  `word_id` mediumint(8) unsigned NOT NULL default '0',
  `title_match` tinyint(1) NOT NULL default '0',
  `forumid` int(9) NOT NULL default '0',
  KEY `post_id` (`post_id`),
  KEY `word_id` (`word_id`),
  KEY `forumid` (`forumid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Avez vous une solution pour ce type de requetes ?

Merci