使用预准备语句在循环中高效查询嵌入式数据库

时间:2017-07-13 19:57:12

标签: java query-optimization h2 derby java-stored-procedures

前几天我问similar question,但后来发现我已经超越了自己。我正在寻找有关处理以下方案的正确方法的建议。我正在尝试SELECT以最快的方式为给定的地址和城市提供正确的经度和纬度。

我的COORDINATES表有25,000行,如下所示:

![enter image description here

我有一个Java HashMap<Integer, List<String>>,其中包含Integer作为密钥,ArrayList包含 2 条目,地址和城市。 HashMap的大小为500。

我需要使用4种不同类型的SELECT语句,因为每个语句都比以前更宽松,如下所示:

SELECT LATITUDE, LONGITUDE FROM coordinates WHERE(address::text = ? AND community::text = ?) 
UNION ALL
SELECT LATITUDE, LONGITUDE FROM coordinates WHERE (address::text = ? AND community::text LIKE ?)
UNION ALL
SELECT LATITUDE, LONGITUDE FROM coordinates WHERE (address::text LIKE ? AND community::text = ?)
UNION ALL
SELECT LATITUDE, LONGITUDE FROM coordinates WHERE (address::text LIKE ? AND community::text LIKE ?)

请注意LIKE=的使用。另请注意我正在使用聚合所有结果的UNION ALL,而我实际上只对单个最佳匹配结果感兴趣,以避免继续查询是否找到匹配项。也许LIMIT可能会有所帮助。

如果我只是遍历我的HashMap并且数据库达到500次以上(使用4部分查询)......由于我没有利用SQL服务器,这看起来很痛苦。现在花了一分多钟。我正在使用H2作为我的嵌入式数据库,但如果需要,我愿意使用Derby或Hyper。

  • 循环浏览HashMap并为每个条目检索相应的,最佳匹配的经度/纬度(如果有)的最快方法是什么?请注意,我必须将准备好的语句中的?与每个条目的相应地址和城市进行匹配。您可以再次查看我当前的方法here

  • 我倾向于存储过程,但教程like this提到创建存储过程类的JAR文件,然后将其安装到Derby。如何部署依赖于JAR存储过程的嵌入式数据库的独立Java应用程序?

0 个答案:

没有答案