数百万条记录中的Sql搜索。可能?

时间:2011-12-22 07:13:01

标签: sql sql-server sql-server-2005

我的sql server 2005数据库中有一个表,其中包含大约5000万条记录。 我有firstNameLastName列,我希望能够允许用户搜索这些列而不需要永久使用。 在索引这些列之后,有没有办法让我的查询快速运行? 另外,我想搜索类似听起来的名字。例如,如果用户搜索Danny,我想返回名为Dan,Daniel的记录。很高兴向用户显示他的实际搜索结果与他的结果有多接近的等级。 我知道这是一项凝灰岩任务,但我敢打赌,我不是世界上第一个面对这个问题的人:)

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

我们拥有5亿条记录的数据库(Oracle,但应具有相似的性能)。如果你有适当的索引,你可以在几毫秒内搜索它。在您的情况下,在firstname和lastname上放置一个索引。使用二叉树索引将表现良好,并将随着数据库的大小而扩展。小心,LIKE条款经常打破索引的使用并大大降低性能。我知道当通配符只在字符串的右边时,MySQL可以继续使用带有LIKE子句的索引。您必须对SQL Server进行类似的搜索。

字符串相似性确实不简单。看看http://en.wikipedia.org/wiki/Category:String_similarity_measures,你会看到一些可能的算法。不能说SQL Server是否实现了其中之一,不知道这个数据库。尝试谷歌“SQL Server”+算法的名称,以找到你需要的。否则,您在Wiki上提供了各种语言的代码(可能不是SQL,但您应该能够根据存储过程对其进行调整)。

答案 1 :(得分:0)

您是否尝试过全文索引?我在超过100万条记录的表中的自由文本字段中使用它,并发现它非常快。另外,你可以添加同义词,这样Dan,Danial和Danny都可以像索尼一样(你得到名字等价词典是另一回事)。它也允许进行通配符搜索。全文索引也可以排名,但我发现它对名称不太有用(对文档更好)。

答案 2 :(得分:0)

对此表和那些列使用FUll TEXT SEARCH启用,这将为这些列创建全文索引。