我在包含如下数据的表中的列上有一个全文索引:
searchColumn
90210 Brooks Diana Miami FL diana.brooks@email.com 5612233395
该列是 Zip、姓氏、名字、城市、州、电子邮件和电话号码的聚合。
我使用此列根据任何可能的信息搜索客户。
我担心的问题是在对该列进行查询时发生大量读取。我正在使用的查询是:
declare @searchTerm varchar(100) = ' "FL" AND "90210*" AND "Diana*" AND "Brooks*" '
select *
from CustomerInformation c
where contains(c.searchColumn, @searchTerm)
现在,当运行 Profiler 时,我可以看到该搜索有大约 50.000 次页面读取以返回单行,而不是使用使用常规索引和多个变量的不同方法时,分解为@firstName
, @LastName
,如下所示:
WHERE C.FirstName like coalesce(@FirstName + '%' , C.FirstName)
AND C.LastName like coalesce(@LastName + '%' , C.LastName)
etc.
使用这种方法,我只能读取大约 140 页。我知道这些方法完全不同,但我试图理解为什么全文版本的阅读量如此之多,以及是否有任何方法可以将其降低到更接近使用常规索引时获得的数字。