Строгий и обычный поиск в одном индексе

Здравствуйте.
Нужно реализовать поиск по заголовкам и по тегам. Первый обычный, с морфологией, второй по строгому соответствию.

Теги (строгий поиск) отдельно делаю так:

sql_query           = SELECT id, tags FROM
...
morphology          = none
min_word_len        = 2
min_stemming_len    = 4
expand_keywords     = 0

Запрос:
WHERE MATCH('@tags ="$query"')

Но, так как еще нужны заголовки, то попробовал объединить в один индекс:

sql_query		= SELECT id, title, tags FROM
...
morphology_skip_fields = tags
morphology          = stem_en # or stem_ru for example
min_word_len	= 2
min_stemming_len 	= 4
expand_keywords	= 1
index_exact_words = 1

charset_table = 0..9, english, russian

запрос на теги тот же, на заголовки
WHERE MATCH('@title $query')

и вроде все работает одинаково, но при общем индексе теги очень сильно тормозят (некоторые)

и профайлинг разворачивает в какое-то очень сложное многослойное OR AND дерево

Что я делаю не так во втором случае и как правильно. По идее, morphology_skip_fields должно дать такой же результат, как и в первом варианте.

Спасибо.

Покажите детали: show meta, show plan.

Строгий (первый) вариант:

1 row in set (0.277 sec)

...

| transformed_tree | PHRASE(fields=(tags), KEYWORD(the, querypos=1), KEYWORD(longest, querypos=2), KEYWORD(tag, querypos=3), KEYWORD(in, querypos=4), KEYWORD(my, querypos=5), KEYWORD(life, querypos=6), KEYWORD(is, querypos=7), KEYWORD(here, querypos=8)) |

Второй, с заголовками:

+----------+
| id       |
+----------+
| 32988888 |
+----------+
1 row in set (11.767 sec)

+----------------+----------+
| Variable_name  | Value    |
+----------------+----------+
| total          | 1        |
| total_found    | 1        |
| total_relation | eq       |
| time           | 11.765   |
| keyword[0]     | =here    |
| docs[0]        | 8433812  |
| hits[0]        | 21916205 |
| keyword[1]     | =in      |
| docs[1]        | 2402153  |
| hits[1]        | 3617985  |
| keyword[2]     | =is      |
| docs[2]        | 634109   |
| hits[2]        | 896942   |
| keyword[3]     | =life    |
| docs[3]        | 3320204  |
| hits[3]        | 4779120  |
| keyword[4]     | =longest |
| docs[4]        | 2847245  |
| hits[4]        | 5337162  |
| keyword[5]     | =my      |
| docs[5]        | 266752   |
| hits[5]        | 295888   |
| keyword[6]     | =tag     |
| docs[6]        | 5013095  |
| hits[6]        | 8889223  |
| keyword[7]     | =the     |
| docs[7]        | 1045048  |
| hits[7]        | 2336208  |
+----------------+----------+
28 rows in set (0.000 sec)

...

| transformed_tree | PHRASE(
  OR(
    AND(fields=(tags), KEYWORD(=the, querypos=1)),
    AND(fields=(tags), KEYWORD(=the, querypos=1))),
  OR(
    AND(fields=(tags), KEYWORD(=longest, querypos=2)),
    AND(fields=(tags), KEYWORD(=longest, querypos=2))),
  OR(
    AND(fields=(tags), KEYWORD(=tag, querypos=3)),
    AND(fields=(tags), KEYWORD(=tag, querypos=3))),
  OR(
    AND(fields=(tags), KEYWORD(=in, querypos=4)),
    AND(fields=(tags), KEYWORD(=in, querypos=4))),
  OR(
    AND(fields=(tags), KEYWORD(=my, querypos=5)),
    AND(fields=(tags), KEYWORD(=my, querypos=5))),
  OR(
    AND(fields=(tags), KEYWORD(=life, querypos=6)),
    AND(fields=(tags), KEYWORD(=life, querypos=6))),
  OR(
    AND(fields=(tags), KEYWORD(=is, querypos=7)),
    AND(fields=(tags), KEYWORD(=is, querypos=7))),
  OR(
    AND(fields=(tags), KEYWORD(=here, querypos=8)),
    AND(fields=(tags), KEYWORD(=here, querypos=8)))) |

в общем, 0.2 секунды против 11 и какая-то излишняя логическая конструкция

Можно полностью SHOW META и сам запрос для каждого варианта?

запросы идентичные

SET profiling=1;SELECT id FROM test_index WHERE MATCH('@tags ="the longest tag in my life is here"') LIMIT 0,50;SHOW META;
SET profiling=1;SELECT id FROM test_tags WHERE MATCH('@tags ="the longest tag in my life is here"') LIMIT 0,50;SHOW META;

мета для строгого (первого)

+----------+
| id       |
+----------+
| 32988888 |
+----------+
1 row in set (0.345 sec)

+----------------+----------+
| Variable_name  | Value    |
+----------------+----------+
| total          | 1        |
| total_found    | 1        |
| total_relation | eq       |
| time           | 0.344    |
| keyword[0]     | here     |
| docs[0]        | 7704184  |
| hits[0]        | 19810611 |
| keyword[1]     | in       |
| docs[1]        | 2031248  |
| hits[1]        | 2697074  |
| keyword[2]     | is       |
| docs[2]        | 335222   |
| hits[2]        | 460922   |
| keyword[3]     | life     |
| docs[3]        | 2667861  |
| hits[3]        | 3658471  |
| keyword[4]     | longest  |
| docs[4]        | 2528361  |
| hits[4]        | 4355482  |
| keyword[5]     | my       |
| docs[5]        | 19917    |
| hits[5]        | 21020    |
| keyword[6]     | tag      |
| docs[6]        | 4723222  |
| hits[6]        | 8149917  |
| keyword[7]     | the      |
| docs[7]        | 791836   |
| hits[7]        | 1708491  |
+----------------+----------+
28 rows in set (0.000 sec)

а оказалось достаточно просто. В запрос надо было ставить

OPTION expand_keywords=0

хотя, конечно, разница по скорости с расширенными в 20-30 раз удивляет. Даже для 4х-словного запроса.