Так вот сценарий:MySQL - полнотекстовый поиск - Losing индекс
- MySQL
- имеют 1 MYISAM Таблица
- Колум имени v.value имеет полнотекстовый индекс
Основной запрос работает нормально, использует индекс, как ожидалось:
SELECT p.online_identifier
FROM (...)
WHERE r.area_id = 3 AND s.state_id= 4
AND (snap.area_has_catalogues_attributes_id = 7028
AND MATCH (v.value) AGAINST('+SomeBrand' IN BOOLEAN MODE))
Теперь, когда я добавляю OR, индекс полнотекстового поиска (по v.value) не используется. Запустите Explain, чтобы проверить его.
Запрос будет выглядеть примерно так:
(...) WHERE r.area_id = 3 AND s.state_id= 4 AND (snap.area_has_catalogues_attributes_id = 7028 AND MATCH (v.value) AGAINST('+SomeBrand' IN BOOLEAN MODE)) OR (snap.area_has_catalogues_attributes_id = 7045 AND MATCH (v.value) AGAINST('+OtherBrand' IN BOOLEAN MODE))
Я не понимаю, почему. Любые идеи?
Прежде всего, большое спасибо за большую помощь. Он направил меня в нужном направлении :) Я пробовал ваш совет, и MySQL использовал индекс :) Результатом было меньше обработанных строк. –
Если вы не возражаете, могу я внести свой вклад в следующий вопрос? [http://stackoverflow.com/questions/16689714/mysql-analyze-query]. Речь идет о производительности запроса, который возник из-за этого :) –