У меня есть несколько таблиц в моей базе данных, для которых потребуется огромное количество соединений для связанных запросов, и таблицы будут часто обновляться. Существуют различные вопросы, которые я хочу задать, связанные с переходом из поиска mysql в поиск sphinx.Sphinx или mysql на соединенных таблицах
Я пытаюсь использовать Sphinx для выполнения запросов (а не для полных текстовых запросов), поскольку механизм mysql слишком медленный из-за большого количества подключений.
Итак, мой первый вопрос заключается в том, имеет ли смысл использовать sphinx для не-полнотекстового поиска, преобразовывая поля в текст посредством конкатенации?
Если вы хотите использовать sphinx, как его использовать для выполнения сложных запросов во всех этих таблицах. Я много исследовал и придумал эти три альтернативы и хотел бы, чтобы ваши взгляды были оптимальными.
- Поскольку Sphinx не имеет СОЕДИНЕНИЙ, де-нормализовать все таблицы в одну таблицу (или просмотреть), а затем запустить индекс индекса sphinx. Это, по-видимому, самый неэффективный способ, так как это приведет к миллиардам строк, а также к другим запросам, которые не связаны с объединением всех таблиц, будет серьезно затруднено.
- Создайте индекс sphinx по каждой из таблиц отдельно. Но это не позволило бы мне использовать эти индексы для запроса, требующего объединения между таблицами. Чтобы преодолеть это, используйте sql_joined_field для столбцов, которые нужно объединить, и sphinx выполнит процесс объединения.
- Поместите JOIN в sql_query, которая строит индекс. Таблицы остаются нормализованными, но вы де-нормализуете при построении индекса. Это кажется хорошим решением. Но в родительских таблицах будет много обновлений/удаления/вставки. Так будет сложным или утомительным делом, чтобы обновить индексы спинкса соответственно и будет ли это препятствовать производительности в долгосрочной перспективе после слишком большого количества обновлений? Как можно следить за обновлениями в родительских таблицах и эффективно изменять индексы sphinx.
Я хотел бы знать, что является лучшим способом для решения проблемы. Извините за длинный вопрос, но я хотел объединить свои исследования, чтобы одно и то же не повторялось в ответах на последующие.
Спасибо за ваше предложение , У меня есть сомнения. Из того, что кажется, по-видимому, дельта-обновления выглядят для индекса, полученного из одной таблицы, а не для производного от объединений по нескольким таблицам. Можно ли использовать технику для той проблемы, с которой я имею дело? – Legolas
Да, не причина, почему нет. Я использую дельта-индексирование с объединением через 4 таблицы. «Фильтр», использующий таблицу счетчиков, должен (не должен) фильтровать первую таблицу в списке, но он может просто присоединиться к другим таблицам. – barryhunter