SQL 索引和多列数据库搜索
SQL Indexes and Multicolumn Database search
我必须执行搜索以查找用户名中的子字符串。
用户在 2 列中有 FirstName 和 LastName。做 WHERE FirstName LIKE '%searchText%' OR LastName LIKE '%searchText%'
就足够了
我想解决的问题是性能。假设目前我预计最多有 1000 个用户。我不想搜索需要很长时间。所以我想到了索引(那些列不会有太大变化,我期望这些列的值几乎永远不会改变)。我知道我将寻找我需要多列索引的两列。
这是正确的做法吗?
还是用SQL全文搜索比较好(请提供一些好的link)?
创建一个连接 FirstName 和 LastName 的视图并在那里搜索会更好吗?
或者最好只使用例如Azure 搜索(目前,这是唯一的,它可能是我需要搜索的最后一个实体)?
我正在使用 .NET 4.6 和 EntityFramework 托管在 Azure 网络应用程序上。
谢谢
由于前导通配符,将不使用索引。唯一使用索引的情况是通配符位于字符串的中间或末尾。如果您的 table 非常宽,如 David Browne 所说,在 LastName 和 FirstName 上添加一个索引也是一个很好的建议。
如果您确实需要使用两个通配符进行搜索(即部分匹配),那么我会看一下您 table 中的数据量。如果我们谈论的只是几千行,table 扫描在性能方面仍然非常出色。如果我们谈论的是 50.000 行或更多行,那么全文索引将是最好的。
这似乎是一个很好的教程:https://docs.microsoft.com/en-us/sql/relational-databases/search/get-started-with-full-text-search
我必须执行搜索以查找用户名中的子字符串。
用户在 2 列中有 FirstName 和 LastName。做 WHERE FirstName LIKE '%searchText%' OR LastName LIKE '%searchText%'
我想解决的问题是性能。假设目前我预计最多有 1000 个用户。我不想搜索需要很长时间。所以我想到了索引(那些列不会有太大变化,我期望这些列的值几乎永远不会改变)。我知道我将寻找我需要多列索引的两列。
这是正确的做法吗? 还是用SQL全文搜索比较好(请提供一些好的link)? 创建一个连接 FirstName 和 LastName 的视图并在那里搜索会更好吗? 或者最好只使用例如Azure 搜索(目前,这是唯一的,它可能是我需要搜索的最后一个实体)?
我正在使用 .NET 4.6 和 EntityFramework 托管在 Azure 网络应用程序上。
谢谢
由于前导通配符,将不使用索引。唯一使用索引的情况是通配符位于字符串的中间或末尾。如果您的 table 非常宽,如 David Browne 所说,在 LastName 和 FirstName 上添加一个索引也是一个很好的建议。
如果您确实需要使用两个通配符进行搜索(即部分匹配),那么我会看一下您 table 中的数据量。如果我们谈论的只是几千行,table 扫描在性能方面仍然非常出色。如果我们谈论的是 50.000 行或更多行,那么全文索引将是最好的。 这似乎是一个很好的教程:https://docs.microsoft.com/en-us/sql/relational-databases/search/get-started-with-full-text-search