use*_*754 0 java database spring
如何找出用户已经注册的内容,例如在Web应用程序中?就像我有一个拥有100万用户的数据库.每次比较数据库中的每一行都是低效的.还有其他最佳方法吗?
每次比较数据库中的每一行都是低效的
我收集到你将整个数据库表内容拖入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或之后的其他查询进行过滤,那么这将是最有效的方法.
| 归档时间: |
|
| 查看次数: |
1056 次 |
| 最近记录: |