有效地部分搜索SQL数据库

时间:2017-03-07 02:37:35

标签: java c# sql

当您输入某个人的姓名时,有哪些有效搜索目录的示例?

比如说,我们有一个拥有100万用户的数据库。我们开始在搜索框中键入:“sea”,它将在可滚动的窗口上显示每个用户的名字,该窗口上有“sea”(有点像在Skype目录中搜索)。更改字母后,窗口应立即更新。所有这些都来自SQL数据库。什么是有效的库,算法可以做到这一点没有太多的延迟?

2 个答案:

答案 0 :(得分:1)

首先考虑从"名称包含子串"更改任务to" name以substring"开头。如果可以,则在数据库表的名称列中添加索引并使用查询:

select name from table where name like :1 || '%'

使用特定于DBMS的语法限制返回的行数,例如,对于Oracle add

and rownum < 20

此查询应该非常快速地返回您的行。

如果您确实需要&#34;包含子字符串&#34;,则决定您是希望搜索由数据库还是外部文本索引解决方案处理。

对于包含数据库的解决方案,您必须根据DBMS使用不同的方法。这些解决方案中的每一个都需要此处未描述的配置步骤。

对于Oracle,您可以使用Oracle Text,请参阅

http://www.oracle.com/technetwork/documentation/index-098492.html

查询看起来像

select name from table where contains(name, :1) > 0

对于Postgres,您可以使用全文搜索。

您还可以使用不依赖于数据库的解决方案,例如,请参阅Apache Solr:

http://lucene.apache.org/solr/

答案 1 :(得分:0)

例如

SELECT name
FROM Table
WHERE name LIKE '%sea%'