我有一个场景我需要执行以下操作:
SELECT *
FROM
[dbo].[MyTable]
WHERE
[Url] LIKE '%<some url>%';
我必须在 Url 的开头和结尾使用两个 % (通配符)('%<some url>%'
),因为即使用户输入部分文本,也应该能够搜索完整的 url。例如,如果 url 是http://www.google.co.in http://www.google.co.in并且用户输入“goo”,则该网址必须出现在搜索结果中。LIKE
操作员导致性能问题。我需要一个替代方案这样我就可以摆脱这个声明和通配符。换句话说,我不想在这种情况下使用 LIKE 语句。我尝试使用 T-SQLCONTAINS
但这并不能解决我的问题。除了执行模式匹配并快速提供结果之外,还有其他可用的替代方法吗?
以 % 开头的点赞将导致扫描。没有办法绕过它。它必须评估每个值。
如果您对该列建立索引,那么它应该是索引(而不是表)扫描。
您没有其他不会导致扫描的替代方案。
Charindex 和 patindex 是替代方案,但仍会扫描并且不会修复性能问题。
你能把这些组件分成一个单独的表吗?
www
google
co
in
然后搜索“goo%”之类的?
这将使用索引,因为它不以 % 开头。
更好的是,您可以搜索“google”并获得索引搜索。
并且您希望该字符串在该表中具有唯一性,并且在 Int PK 上有一个单独的联接,因此它不会返回多个 www 等。
Suspect FullText Contains 并没有更快,因为 FullText 将 URL 保留为一个单词。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)