我有一个最初看起来像这样的查询:
select c.Id, c.Name, c.CountryCode, c.CustomerNumber, cacc.AccountNumber, ca.Line1, ca.CityName, ca.PostalCode
from dbo.Customer as c
left join dbo.CustomerAddress as ca on ca.CustomerId = c.Id
left join dbo.CustomerAccount as cacc on cacc.CustomerId = c.Id
where c.CountryCode = 'XX' and (cacc.AccountNumber like '%C17%' or c.Name like '%op%'
or ca.Line1 like '%ae%' or ca.CityName like '%ab%' or ca.PostalCode like '%10%')
在一个有 90,000 条记录的数据库上,这个查询大约需要 7 秒的时间来执行(显然所有的连接和点赞都是很费力的)。
我一直在尝试找到一种方法,通过对相关列进行全文搜索来降低查询执行时间。但是,我还没有看到这样的具有三个表连接的全文搜索示例,尤其是因为我的连接条件不是搜索词的一部分。
有没有办法在全文搜索中做到这一点?
@大卫
是的,ID 上有索引。
我已经尝试在 CustomerAddress 的东西(CityName、PostalCode 等)上添加索引,它将查询缩短到 3 秒,但我仍然发现这样的事情太慢了。
请注意,所有文本字段(ID 除外)都是 nvarchars,而 Line1 是 nvarchar 1000,因此可能会影响速度,但仍然如此。