如何找出用户已经注册,例如在 Web 应用程序中?就像我有一个包含 100 万用户的数据库。每次比较数据库中的每一行都是低效的。还有其他最佳方法吗?
问问题
1422 次
2 回答
8
每次比较数据库中的每一行都是低效的
我收集到您正在通过 a 将整个 DB 表内容拖入 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!)
}
那么这确实是非常低效的。您应该索引用户名列(它可能已经是,有UNIQUE
约束),然后使用 SQLWHERE
子句。它将准确返回零或一行,数据库将尽最大努力找到它,这通常比上述 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 进行过滤或之后的其他查询,那么这将是最有效的方法。
于 2013-08-26T11:22:47.417 回答
1
您可以优化您的query
。您可以为用户维护一个唯一的用户名(或您的唯一参数),当有人尝试注册时,您可以将其传递usename
给查询并检查它是否已经注册
于 2013-08-26T11:16:05.350 回答