Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有效地通过SQL数据库进行部分搜索_Java_C#_Sql - Fatal编程技术网

Java 有效地通过SQL数据库进行部分搜索

Java 有效地通过SQL数据库进行部分搜索,java,c#,sql,Java,C#,Sql,当你输入一个人的名字时,有哪些例子可以有效地在目录中搜索 比如说,我们有一个拥有100万用户的数据库。我们开始在搜索框中输入:“sea”,它将在一个可滚动的窗口上显示每个用户的姓名,该窗口上有“sea”(有点像在Skype目录中搜索)。更改字母后,窗口应立即更新。所有这些都来自一个SQL数据库。有哪几种高效的库和算法可以做到这一点而不需要太多的延迟 SELECT name FROM Table WHERE name LIKE '%sea%' 首先考虑将任务从“名称包含子字符串”改为“用子字符串

当你输入一个人的名字时,有哪些例子可以有效地在目录中搜索

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

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

首先考虑将任务从“名称包含子字符串”改为“用子字符串启动名称”。如果可以,则在数据库表中的名称列上添加索引,并使用以下查询:

select name from table where name like :1 || '%'
使用特定于DBMS的语法限制返回的行数,例如,对于Oracle add

and rownum < 20
对于Postgres,您可以使用全文搜索

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


如果我没有弄错的话,还可以使用TextChange Event。这是非常低效的,会杀死服务器。然后使用readpass进行添加。readpass对解决性能问题没有任何作用。很明显,您没有意识到表快速连续多次扫描一百万行的影响。好的,我明白您的意思了。然后不要使用TextChange:)只需创建一个搜索按钮即可。这与主题无关,请参阅。如果你有一个特定的问题,发布相关的代码,它将有可能帮助你。不需要任何库或花哨的算法。只需确保该表在您搜索的列上有一个索引,然后执行普通的SQL选择。像“从名称>=:1的表中选择名称”这样的操作不是更有效吗?在这些情况下,Oracle可能会选择您的“%”,但我相信我的解决方案将适用于更多的版本/产品。不幸的是,该查询返回的结果不正确。考虑一个记录“ABC”存储在表和输入值“ABB”。记录不应该返回,但在使用你的条件时会返回。你是绝对正确的,我的例子是错误的,即使我认为这一点仍然有效。让我们再试一次。“从表中选择名称,其中名称>=:1,名称='abb',名称=:1,名称@p.marino这似乎是一个有效的解决方案。对于更广泛的DBMS,它似乎更可靠。不过,您必须考虑最高的可打印字符。
select name from table where contains(name, :1) > 0