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

use*_*754 0 java database spring

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

Bal*_*usC 8

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

我收集到你将整个数据库表内容拖入Java的内存中SELECT * FROM User,然后循环遍历循环中的每一行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!)
}
Run Code Online (Sandbox Code Playgroud)

那确实非常低效.您应该索引用户名列(它可能已经有UNIQUE约束),然后使用SQL WHERE子句.它将返回正好为零或一行,并且数据库将尽最大努力找到它,这通常比上述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!)
}
Run Code Online (Sandbox Code Playgroud)

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