我想让系统 whitch 允许按特定用户搜索用户消息。假设有下表
create table messages(
user_id int,
message nvarchar(500));
那么,如果我想搜索来自用户 1 的所有包含单词 'foo' 的消息,我应该在这里使用什么样的索引。
- 简单,非唯一索引user_id
它将仅过滤特定的用户消息,然后完全扫描特定的单词。 - 消息上的FULLTEXT索引
这将查找来自所有用户的所有消息,然后按 ID 过滤,在大量用户的情况下似乎效率很低。 - user_id和message上的复合索引
因此为每个用户分别创建全文索引树,因此可以单独搜索它们。在查询期间,系统按ID过滤消息,然后对索引中的剩余行执行文本搜索。
AFAIK 最后一个是不可能的。那么我假设我将使用第一个选项,如果有几千个用户,它会表现得更好吗?
如果每个都有约 100 条消息,那么完整迭代不会花费太多资源?
也许我可以将用户名包含在消息中并使用 BOOLEAN 全文搜索模式,但我认为它会比使用索引user_id慢。