1

我试图确定在表内两列实现部分搜索的最佳方式。目标是尽可能快地执行此搜索。部分搜索SQL Azure上的两个文本字段 - 最佳实践

我们的问题是我们的数据库托管在SQL Azure上;不支持FullTextIndexing。这意味着我们在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 '%'[email protected]+'%' 
OR AU.Surname LIKE '%'[email protected]+'%' 

也可给我们的是利用Lucene的能力;我们已经在Windows Azure上的Worker角色上设置了它,但是我们必须在数据库内部和Lucene内维护数据的完整性。

我想了解的是:

  1. 有如果我添加计算列在表中的T-SQL执行LIKE搜索比我使用上述
  2. 什么更好的方法同时包含名字和姓氏这会提高查询的性能吗?
  3. 或者;如果我们移动到Lucene;读取性能会比上述查询大得多吗? (对此,dbo.Users表中目前有10,000行以下)
  4. 把门打开;有没有我们没有考虑过的方法会使整个负载更容易?

回答

2

添加包含名和姓的计算列将强制结果包含名和姓,但上面的SQL用于匹配第一个或最后一个名。

如果你想匹配第一个姓和最后一个名字,计算列可能会更快,因为数据库程序员可以为你申请一些技巧(例如:Boyer-Moore快速字符串搜索,它随着模式大小的增加而变快) 。

我对Lucene的经验是它比任何数据库搜索都快得多 - 我在日常硬件上看不到任何东西。但正如你所说,你将不得不保持Lucene索引与数据库同步。