使用全文搜索在巨大的表格上搜索

时间:2017-07-14 15:49:14

标签: sql sql-server full-text-search sqlperformance

我有一个表“订户”(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

花了太长时间,所以我看看现场计划,这就是我得到的。

Live plan

它获得了大约80k行,因为它适用于所有用户,然后过滤到所需的用户,但也许所需的用户只有1行作为结果...如果我放了一个普通的关键字,那就更糟了。

我创建了这个以避免使用LIKE'%keyword%',但在某些情况下,性能比使用UserId,Email和做类似的创建索引更差。

如何更改FullText索引或查询以提高性能?

0 个答案:

没有答案