我有一列的全文索引中包含这样的数据表:全文索引搜索有大量页面的读取
searchColumn
90210 Brooks Diana Miami FL [email protected] 5612233395
列是拉链的集合体,姓氏,名称,城市,州,电子邮件和电话号码。
我使用此列根据这些可能的信息搜索客户。
我担心的问题是在对此列执行查询时发生大量读取操作。我使用的查询是:
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页读取。我知道这些方法是完全不同的,但我试图理解为什么全文版本有更多的读取,以及是否有任何方法可以将它们降低到接近使用常规索引时获得的数字。
好的,我收到了关于'*'的评论,其实我只是拉我需要的列,我只是把'*'不要太混乱,因为有很多列。另外,我认为如果引擎已经在第一次拉到页面时每次必须检查它,那么引擎就会去阅读页面,这很奇怪。但我会检查Brent的教程,谢谢! –