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