检索记录时使用MySql数据库的ArrayList性能

时间:2011-06-08 20:50:33

标签: java mysql arraylist

我有一个可以包含1000个用户的LoginID数据库。现在检查一个用户是否存在正在做的是将我的数据库的所有LoginID值存储到一个arraylist而不是检查它是否存在

代码:

while(result.next())
{
  String str = result.getString(1);
  LoginID_arraylist.add(str);
}

if(LoginID_arrayList.contains(loginid)
{
    // if exist --> than another query using loginid
}

这是实现我想要的结果的好方法吗?我的选择是什么......如果我的体型进一步增长,它会影响我的表现吗? 我正在使用MySql和JDBC。

4 个答案:

答案 0 :(得分:4)

请勿使用ArrayList进行contains搜索。那有O(n)表现。相反,请使用HashSet,其中包含O(1)查找。

然而,更好的是不首先查询所有行。只需提出您的疑问:

SELECT COUNT(*) FROM users WHERE login_id = ?

然后查看结果是否为0。

答案 1 :(得分:1)

尝试使用HashSet而不是ArrayList。

一个集合不允许重复,并且结构更快,查找速度更快。

答案 2 :(得分:1)

对于极大的数据集,解决方案无法很好地扩展,因为使用contains()仍然有大O(N)时间。

您可以轻松地将当前的loginId传递给存储过程...然后返回包含第二个条件查询所需商品的其他数据集。

这样可以节省你的数据库之旅并节省在列表上迭代N次,寻找你可能在查询中找到的东西。

答案 3 :(得分:1)

我会使用常规的SQL选择并检查是否有任何结果。

SELECT LOGIN_ID.ID FROM LOGIN_ID WHERE ID = 'loginid'

这样,数据库可以优化和缓存查询,并利用列上的任何索引。另外,您只需要访问id列而不是loginID表中的每一列。