【发布时间】:2018-02-21 00:18:09
【问题描述】:
我必须实现在用户名中查找子字符串的搜索。
用户在 2 列中有 FirstName 和 LastName。做就够了WHERE FirstName LIKE '%searchText%' OR LastName LIKE '%searchText%'
我想要解决的问题是性能。假设目前我预计最多有 1000 个用户。我不想搜索需要很长时间。所以我想到了索引(那些列不会有太大变化,我希望这些列的值几乎永远不会改变)。我知道我将寻找我需要多列索引的两列。
这是正确的做法吗? 或者最好使用SQL全文搜索(请提供一些好的链接)? 创建一个将连接 FirstName 和 LastName 并在那里搜索的视图会更好吗? 或者最好只使用例如Azure 搜索(目前,这是唯一的,它可能是我需要搜索的最后一个实体)?
我正在使用托管在 Azure Web 应用程序上的 .NET 4.6 和 EntityFramework。
谢谢
【问题讨论】:
-
当您需要前导通配符时,再多的索引也无济于事,因为您的查询将变得不可搜索。在这种情况下,全文通常更好。我投票结束这个问题过于宽泛,因为这里没有足够的细节来提供任何真正的建议。
-
因此,如果我通过将查询更改为 FirstName% 或 LastName% 正确理解,我会得到 SARGable 查询吗?我不会说这个问题太宽泛。我要求给定搜索场景的最佳实践。我不需要任何人给我一些代码或其他东西,只需要一个方向,我应该以哪种方式解决这个搜索场景或类似的场景。无论如何,感谢您的回复,它帮助我查看了 SARGable 的东西。
-
拥有 1000 个用户,只需扫描所有用户。如果您的表非常宽,请在 (LastName, FirstName) 上添加一个索引,以便 SQL 可以扫描它而不是整个表。
标签: sql sql-server entity-framework full-text-search azure-cognitive-search