元々次のようなクエリがあります。
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秒かかります(明らかに、すべての結合といいねが負担になります)。
関連する列の全文検索を使用して、クエリの実行時間を短縮する方法を模索してきました。ただし、特に結合条件が検索語の一部ではないため、このような3つのテーブル結合を含む全文検索の例は見たことがありません。
全文検索でこれを行う方法はありますか?
@David
はい、IDにはインデックスがあります。
CustomerAddressのもの(CityName、PostalCodeなど)にインデックスを追加しようとしましたが、クエリが3秒に短縮されましたが、それでもこのようなものには遅すぎます。
すべてのテキストフィールド(IDを除く)はnvarcharsであり、Line1はnvarchar 1000であるため、速度に影響を与える可能性がありますが、それでもなお注意してください。