如何找出用户已注册的内容,例如在Web应用程序中?就像我有一个拥有100万用户的数据库。每次比较数据库中的每一行都是低效的。还有其他最佳方法吗?
答案 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
传递给查询并检查它已经是注册与否