2011-10-24 4 views
0

フルテキスト一致はブールモードに対して条件付きのワードを追加するとそのインデックスを無視します。次のように選択がある:ブールモードでフルテキストインデックスが無視される条件付きワード数で使用された場合

explain select * from seeds WHERE MATCH(text) AGAINST ("mount cameroon" IN BOOLEAN MODE); 

出力

+----+-------------+-------+----------+---------------+------+---------+------+------+-------------+ 
| id | select_type | table | type  | possible_keys | key | key_len | ref | rows | Extra  | 
+----+-------------+-------+----------+---------------+------+---------+------+------+-------------+ 
| 1 | SIMPLE  | seeds | fulltext | text   | text | 0  |  | 1 | Using where | 
+----+-------------+-------+----------+---------------+------+---------+------+------+-------------+ 

条件付単語の数と同じクエリ

explain select * from seeds WHERE MATCH(text) AGAINST ("mount cameroon" IN BOOLEAN MODE) = 4; 

出力

+----+-------------+-------+------+---------------+------+---------+------+------+-------------+ 
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra  | 
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+ 
| 1 | SIMPLE  | seeds | ALL | NULL   | NULL | NULL | NULL | 9607 | Using where | 
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+ 

確かにこれが正しいことカント動作?

答えて

0

診断は、フルテキストマッチに条件が追加されたときに、Mysqlオプティマイザが簡単に混乱することがあります。解決策は、クエリをリファクタリングすることです(サブクエリに分割して結合します)。

この診断、溶液を親切RolandoMySQLDBA(https://stackoverflow.com/users/491757/rolandomysqldba)によって提供される、フルavailableinされ、ここで

Optimizing mysql fulltext search

ここ

https://dba.stackexchange.com/questions/7136/fulltext-index-ignored-in-boolean-mode-with-number-of-words-conditional

関連する問題