У меня есть таблица Document с полным текстовым индексом headline_idx на два столбца, заголовок и текст, где текст является столбцом MEDIUMTEXT
, есть также некоторые другие поля, один из названных lang.
Если я сделаю следующее, выберите:
select * from Document where lang= 'en' AND match(headLine,text) against ("test")
все работает нормально, индекс полнотекстового использования используется, как и ожидалось, но если я изменил AND на OR следующим образом:
select * from Document where lang= 'en' OR match(headLine,text) against ("test")
полный текстовый индекс НЕ используется, он даже не является частью possible_keys
, если я делаю EXPLAIN EXTENDED
, что делает любые подсказки индекса бесполезными.
Я был бы счастлив добавить третий столбец в полный текстовый индекс, но в реальном случае этот столбец находится в другой таблице. Я запускаю версию 5.1.35 MySQL.
Любые идеи о том, что происходит?
Цитата из ссылки на MySql: Слияние индексов не применимо к полнотекстовым индексам. Мы планируем расширить его, чтобы охватить их в будущем выпуске MySQL.
Этот конкретный запрос можно перефразировать с помощью объединения, а затем использовать индексы:
select * from Document where lang= 'en' UNION
select * from Document where match(headLine,text) against ("test")