У меня есть запрос, который изначально выглядит так:
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 секунд (очевидно, что все объединения и лайки облагаются налогом).
Я пытался найти способ сократить время выполнения запроса с помощью полнотекстового поиска по соответствующим столбцам. Однако я не видел пример полнотекстового поиска с тремя объединениями таблиц, подобным этому, тем более что мое условие объединения не является частью поискового запроса.
Есть ли способ сделать это в полнотекстовом поиске?
@ David
Да, на идентификаторах есть индексы.
Я попытался добавить индексы для компонента CustomerAddress (CityName, PostalCode и т. Д.), И запрос снизился до 3 секунд, но я все еще нахожу это слишком медленным для чего-то подобного.
Обратите внимание, что все текстовые поля (за исключением идентификаторов) являются nvarchars, а Line1 является nvarchar 1000, так что это может повлиять на скорость, но все же.