数据库数据过滤最佳实践

时间:2014-06-11 14:44:25

标签: java mysql jdbc

我目前正在使用原始JDBC来查询MySql数据库中的记录;最后提取后续Resultset中的每个记录,将其放置在特定于域的模型中,并存储到列表实例中。

我的查询是:在需要进一步过滤该数据的情况下(偶然基于SAME表中存在的列),以下哪种方法通常被认为是最佳实践:

1.发出更多WHERE子句调用数据库。这将有效地将过滤过程卸载到数据库,但显然会导致连续应用多个过滤器的其他查询或查询。

2.在应用程序级别明确过滤上述预处理列表,从而无需在每次过滤记录时都必须对数据库进行额外调用。

3.上述两种方法的一些混合组合,也许所有过滤操作最初都是由数据库服务器进行的,但是已经预处理到特定于应用程序的模型,并在一段有限的时间内隐式缓存到集合中。然后,在该间隔内接收的进一步过滤查询将从存储在高速缓存中的数据进行服务。

请务必注意,此方案中的数据库服务器实际位于此位置 因此,在外部机器上,通过本地网络发送查询流量的开销和延迟也必须考虑到我们最终选择采用的方法中。

我明显知道古老的口头禅,它规定:"数据库服务器应该用来做它擅长的事情。"但是在这种情况下,对于在数据库中进行大量调用以过滤我在应用程序级别已经拥有的数据,这似乎是一个不太适当的解决方案。

非常感谢您的想法和见解。

2 个答案:

答案 0 :(得分:1)

我在许多应用程序中使用了混合方法,效果很好。

数据库筛选适用于索引的列。这减少了网络开销,因为向应用程序发送的行更少。

根据结果中的行数和缺少索引,某些列的数据库筛选可能非常慢。与数据库查询时间相比,网络开销可以忽略不计,因此对于这种情况,应用程序过滤可能会更快。

我还发现Java中的应用程序过滤更容易编写和理解,而不是复杂的SQL。

我通常使用普通SQL手动进行实验以在合理的时间内获得最少的行。然后编写Java以优化到所需的行。

答案 1 :(得分:0)

我首先感谢这个问题...因为我几天前也遇到过类似的情况...因为你已经讨论了所有可用的选项我更喜欢第二种选择....我的意思是在应用程序级别处理而不是在DB级别过滤。