我有一个可以包含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。
答案 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表中的每一列。