我必须实现在用户名中查找子字符串的搜索。
用户在2列中具有FirstName和LastName。做WHERE FirstName LIKE '%searchText%' OR LastName LIKE '%searchText%'
我想要解决的问题是性能。让我们说目前我预计会有1000名用户占据上风。我不想搜索需要多长时间。所以我想到了索引(这些列不会有太大变化,我希望这些列的值几乎不会改变)。我知道我将寻找两列我需要多列索引。
这是正确的做法吗? 或者最好使用SQL全文搜索(请提供一些好的链接)? 创建一个View将FirstName和LastName连接起来并在那里搜索会更好吗? 或者最好只使用例如Azure搜索(目前,这是唯一的,它可能是我需要搜索的最后一个实体)?
我正在使用Azure网络应用上托管的.NET 4.6和EntityFramework。
由于
答案 0 :(得分:0)
由于前导通配符,将不使用索引。索引将被使用的唯一时间是通配符位于字符串的中间或末尾。在LastName上添加一个索引,如果你的表格非常广泛,FirstName也是一个很好的建议,就像David Browne所说的那样。
如果您确实需要使用两个通配符(即部分匹配)进行搜索,那么我将查看表中的数据量。如果它只是我们谈论的几千行,那么表扫描仍然会非常精细。如果我们谈论的是50.000行或更多行,那么全文索引将是最好的。 这似乎是一个很好的教程:https://docs.microsoft.com/en-us/sql/relational-databases/search/get-started-with-full-text-search