我正在尝试提高MSSQL数据库中的文本搜索过程的速度。
该过程查询多个表以搜索任何匹配的记录(属性、用户、业务等)。例如,users表有400,000多行,我们正在搜索6个nvarchar列,以满足指定的搜索条件。此外,如果有空格,我们将在搜索条件中分别搜索每个单词,以提高结果的准确性。相同的过程搜索包含超过120,000行的属性表,并查询单个地址列。
我已经实现了对适当的表和列的全文搜索,但是搜索可能需要7到10秒才能返回结果。理想情况下,我希望这是在2秒以下。
这是我用来查找用户的查询的一个示例:
SELECT
u.[UserId]
FROM [mgr].[Users] u
LEFT JOIN [mgr].[UserAddresses] ua ON ua.[UserId] = u.[UserId]
LEFT JOIN [mgr].[vAddress] ad ON ad.[AddressId] = ua.[AddressId]
WHERE CONTAINS((u.[Forename], u.[Surname], u.[Email], u.[Phone], u.[WPhone], u.[MPhone]), @SearchCriteria)
OR CONTAINS(ad.[FullAddress], @SearchCriteria);我能做些什么来提高速度吗?我们预计这些表中的数据量将快速增长,因此任何有助于提高可伸缩性的帮助都将是巨大的。
发布于 2020-08-25 19:36:12
我想知道将它分成两个查询会不会更快:
SELECT u.[UserId]
FROM [mgr].[Users] u
WHERE CONTAINS((u.[Forename], u.[Surname], u.[Email], u.[Phone], u.[WPhone], u.[MPhone]), @SearchCriteria)
UNION -- on purpose to remove duplicates
SELECT ua.[UserId]
FROM [mgr].[UserAddresses] ua ON = u.[UserId] JOIN
[mgr].[vAddress] ad
ON ad.[AddressId] = ua.[AddressId]
WHERE CONTAINS(ad.[FullAddress], @SearchCriteria);https://stackoverflow.com/questions/63577952
复制相似问题