Я хотел бы сделать системный whitch позволяет искать сообщения пользователей конкретным пользователем. предположить, имеющее folowing таблицыCompound FULLTEXT index в MySQL
create table messages(
user_id int,
message nvarchar(500));
Так, какой индекс следует использовать здесь, если я хочу, чтобы найти все сообщения от пользователя 1, содержащего слово «Foo».
- Simple, не уникальный индекс user_id
Он будет фильтровать только определенные пользовательские сообщения, то без обозначения даты полного сканирования для конкретного слова. - FULLTEXT индекс сообщения
это будет найти все сообщения от всех пользователей, а затем фильтровать по идентификатору, кажется, очень неэффективен в случае большого количества пользователей. - comopound индекс как user_id и сообщения
Так полнотекстовый индекс дерева создаются для каждого пользователя в отдельности, так что они могут быть найдены в индивидуальном порядке. Во время запроса система фильтрует сообщения на ID, а затем выполняет текстовый поиск по оставшимся строкам в индексе.
A.F.A.I.K. последнее невозможно. Итак, я предполагаю, что буду использовать 1-й вариант, он будет работать лучше в случае нескольких тысяч пользователей?
И если у каждого будет ~ 100 сообщений, полная итерация не будет стоить больших ресурсов?
Возможно, я могу включить имя пользователя в сообщение и использовать режим полнотекстового поиска BOOLEAN, но я думаю, что это будет медленнее, чем с помощью индексированного user_id.
Спасибо за такой полный ответ, я подумал об использовании user_id_500 для индекс. Я думаю, что я буду тестировать различные сценарии, включая очертание по ID пользователя между разными таблицами (например, 20 пользователей в таблице, чтобы сделать полный текстовый индекс эффективным) и выполнять тесты. –