我有一个表“订户”(500 Millon行),大约有20列,在我的应用程序中,我让用户通过电子邮件,名字或姓氏搜索他的订阅者
所以我用这三列
创建了一个FullText索引CREATE FULLTEXT CATALOG [SubscribersCatalog] WITH ACCENT_SENSITIVITY = OFF
GO
CREATE FULLTEXT INDEX ON [dbo].[Subscriber]
([Email] LANGUAGE 1033, [FirstName] LANGUAGE 1033, [LastName] LANGUAGE 1033)
KEY INDEX [PK_Suscriber]
ON ([SubscribersCatalog], FILEGROUP [Subscriber]);
Subscriber表的Id为PK,UserId为FK
执行此查询时
select *
from dbo.subscriber s
where contains(email,'*keyword*')
and s.UserId = 92651
花了太长时间,所以我看看现场计划,这就是我得到的。
它获得了大约80k行,因为它适用于所有用户,然后过滤到所需的用户,但也许所需的用户只有1行作为结果...如果我放了一个普通的关键字,那就更糟了。
我创建了这个以避免使用LIKE'%keyword%',但在某些情况下,性能比使用UserId,Email和做类似的创建索引更差。
如何更改FullText索引或查询以提高性能?