我试图确定在表中的两列上实现部分搜索的最佳方法。目的是让此搜索尽快执行。
我们的问题是我们的数据库托管在 SQL Azure 上;不支持全文索引。这意味着我们在 SQL 中唯一可用的本机命令是CHARINDEX()
和LIKE '% %'
。
如果我们要在纯 T-SQL 中执行查询,查询的结构将是:
DECLARE @SearchTerm VarChar(255) = 'Luke'
SELECT AU.UserID,
AU.FirstName,
AU.Surname
FROM dbo.Users AU
WHERE AU.FirstName LIKE '%'+@SearchTerm+'%'
OR AU.Surname LIKE '%'+@SearchTerm+'%'
我们还可以使用 Lucene;我们已经在 Windows Azure 上的 Worker Role 上设置了它,但是我们必须在数据库内部和 Lucene 中维护数据的完整性。
我想知道的是:
LIKE
有没有比我上面使用的更好的方法在 T-SQL 中执行搜索- 如果我在包含名字和姓氏的表中添加一个计算列,这会提高查询的性能吗?
- 或者; 如果我们迁移到 Lucene;读取性能会比上述查询高得多吗?(关于这一点;表中当前有不到 10,000 行
dbo.Users
) - 打开门;是否有一些我们没有考虑过的方法可以使整个负载变得更容易?