gpt4 book ai didi

sql-server - 如何在 SQL Server 中使 LIKE '%Search% 更快

转载 作者:行者123 更新时间:2023-12-01 06:19:20 25 4
gpt4 key购买 nike

我有一个下面的查询,它占用了很多时间:-

 SELECT 
p.CrmId,
park.Name
FROM
Property p
INNER JOIN
Som som ON som.CrmId = p.SystemOfMeasurementId
LEFT JOIN
Park park ON park.CrmId = p.ParkId
WHERE
((p.City like '%' + @search + '%' )
OR (p.Address1 like '%' + @search + '%')
OR (p.Address2 like '%' + @search + '%' )
OR (p.State like '%' + @search + '%' )
OR (park.Name like '%' + @search + '%' )
OR (p.ZipCode like '%' + @search + '%')
)
AND (@usOnly = 0 or (p.CrmCountryId = @USA_COUNTRY_ID))

我读过当我们使用 LIKE '%Search% 时索引不能正常工作.

关于如何加快速度的任何想法?

最佳答案

你说得对...带有前导通配符的查询是 糟糕 为性能。为了解决这个问题,Sql Server 有一个叫做 full text search 的东西。 .您创建了一个特殊的FULL TEXT Index对于您要搜索的每一列,然后更新您的代码以使用 CONTAINS keyword :

SELECT 
p.CrmId,
park.Name
from Property p
inner join Som som on som.CrmId = p.SystemOfMeasurementId
left join Park park on park.CrmId = p.ParkId
WHERE
(
Contains(p.City, @search)
or Contains(p.Address1, @search)
or Contains(p.Address2, @search)
or Contains(p.State, @search)
or Contains(park.Name, @search)
or Contains(p.ZipCode, @search)
)
AND (@usOnly = 0 or (p.CrmCountryId = @USA_COUNTRY_ID))

不幸的是,所有这些 OR 条件仍然可能会使速度变慢,并且 FULL TEXT 并不适用于像 City 或 State 这样的较短字符串,或者像这样转换宽网。您可能会发现通过与 Solr 之类的工具集成,您可以更好地进行此类搜索。或 ElasticSearch .除了编写更好更快的搜索之外,这些工具还可以帮助您创建合理的排名,以按有意义且与输入相关的顺序返回结果。

另一种策略是创建一个计算列,将您的地址和名称文本连接到一个列中,然后使用单个 CONTAINS() 调用在该字段上执行单个 FULL TEXT 索引。

关于sql-server - 如何在 SQL Server 中使 LIKE '%Search% 更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38599794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com