找出用户是否已注册的最佳方法

时间:2013-08-26 11:01:35

标签: java database spring

如何找出用户已注册的内容,例如在Web应用程序中?就像我有一个拥有100万用户的数据库。每次比较数据库中的每一行都是低效的。还有其他最佳方法吗?

2 个答案:

答案 0 :(得分:8)

  

每次比较数据库中的每一行都是效率低下的

我收集到你正在通过SELECT * FROM User将整个数据库表内容拖入Java的内存中,然后循环遍历while循环中的每一行并将其用户名与equals()进行比较下面,是真的吗?

public boolean exists(String username) throws SQLException {
    // ... Declare, etc.

    statement = connection.prepareStatement("SELECT * FROM User");
    resultSet = statement.executeQuery();
    while (resultSet.next()) {
        if (username.equals(resultSet.getString("username"))) {
            return true;
        }
    }
    return false;

    // ... Close, etc (in finally!)
}

那确实非常低效。您应该索引用户名列(可能已经使用UNIQUE约束),然后使用SQL WHERE子句。它将返回完全零或一行,DB将发现它,它通常比上述Java方法快得多。

public boolean exists(String username) throws SQLException {
    // ... Declare, etc.

    statement = connection.prepareStatement("SELECT id FROM User WHERE username = ?");
    statement.setString(1, username);
    resultSet = statement.executeQuery();
    return resultSet.next();

    // ... Close, etc (in finally!)
}

简而言之,只要您正确使用数据库索引并编写SQL查询,使其返回完全您需要的信息,而无需使用Java或其他查询进行过滤那么这将是最有效的方法。

答案 1 :(得分:1)

您可以优化query。您可以为用户维护唯一的用户名(或您的唯一参数),当有人尝试注册时,您可以将usename传递给查询并检查它已经是注册与否